Maven的依赖
使用Maven构建项目的时候,需要在pom文件中添加项目所需要的依赖,即第三方jar包,添加依赖时可以根据需求指定作用域,下面就来详细讲解下Maven依赖作用域的不同。
依赖配置
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type></type>
<scope></scope>
<optional></optional>
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
</dependency>
以上是在Pom文件中引入一个依赖的基本配置,其中scope标签就是控制此依赖的作用域。
依赖的作用域
Maven项目有三种ClassPath,分别为编译、测试、运行,scope标签就是控制项目引入的依赖对于这三种ClassPath的作用,以下对于三种ClassPath均用“阶段”进行表示。
- compile
当引入依赖,不指定scope标签的值时,此依赖的作用域默认为compile,当然也可以用scope标签指定该值。使用该依赖范围的maven依赖,在项目的编译、测试、运行阶段都会起作用,项目打包的时候也会被打包进去。 - test
该依赖范围的依赖,只对于项目的测试阶段起作用,包括测试代码的编译、运行,最典型的jar包如Junit。 - provider
该依赖范围作用于编译和测试阶段,但是运行时不需要,因为在运行期间有关容器已经提供了此jar包,比如servlet api。此依赖范围在项目打包的时候不会被打进去。 - runtime
该依赖范围作用于项目的运行和测试阶段,但是编译阶段不需要,比如jdbc的驱动包,在项目的编译阶段,代码中只需使用JDK提供的JDBC接口即可,在运行阶段才需要实现JDBC的具体驱动 。 - import
该依赖用于导入dependency管理,通常在标签中使用,进行统一的jar包版本管理。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.13.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- system
该依赖范围与provider相似,作用于编译和测试阶段,但是运行时不需要,但是必须显示的提供一个位于本地磁盘上的jar包路径。
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
<scope>system</scope>
<systemPath>${basedir}/lib/commons-lang3.jar</systemPath>
</dependency>
</dependencies>