Maven依赖中有个scope元素,控制依赖jar包的使用范围。用的不当,容易造成jar包冲突,程序异常等。通常有:compileruntimeprovidedtestsystemimport

compile(编译):不指定时,默认。表示该依赖的jar包,参与编译、测试、打包、运行等阶段。
runtime(运行时):编译的时候不需要这个jar包,但是会参与项目的测试和运行,比如jdbc具体的实现类,常用的lombok都可以设置为runtime。
provided(已提供):被依赖项目理论上可以参与编译、测试、运行等阶段,相当于compile,但是再打包阶段做了exclude的动作。
适用场景:例如, 如果我们在开发一个web 应用,在编译时我们需要依赖 servlet-api.jar,但是在运行时我们不需要该 jar 包,因为这个 jar 包已由应用服务器提供,此时我们需要使用 provided 进行范围修饰。
test(测试):表示被依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。常见的Junit测试。
system(系统):ystem 元素与 provided 元素类似,但是被依赖项不会从 maven 仓库中查找,而是从本地系统中获取,systemPath 元素用于指定本地系统中 jar 文件的路径。

import(引用):一般应用于<dependencyManagement>标签中,表示从其他的pom中导入依赖。
比如常见的springboot提供了依赖pom:

1
2
3
4
5
6
7
8
9
10
11
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

其中规定了各个依赖的版本,方便统一管理一个项目的组件版本,并且pom文件更加整洁,不容易出错。