参考:pom.xml
值 | 依赖范围 | 说明 |
---|---|---|
compile |
编译依赖范围 | 在测试、编译和运行时都会引入。如果没有指定 scope,默认就是 compile。 |
test |
测试依赖范围 | 仅在执行测试代码时引入。 |
provided |
已提供依赖范围 | 在测试和编译时引入,但在运行时无效。典型的例子就是 servlet-api ,编译和测试项目的时候需要使用到该依赖,但运行项目的时候,由于容器已经提供,就不需要 Maven 重复引入一遍。 |
runtime |
运行时依赖范围 | 在测试和运行时引入。 |
import |
导入依赖范围 |
对于依赖的依赖,Maven 都会一个个解析,以传递性依赖的形式引入当前项目中。
因为传递性依赖,一个项目中可能会使用到同一种依赖的不同版本,Maven 是用这两种原则解决:
- 依赖路径最短优先,例如:A->B->C->X(1.0) 和 A->D->X(2.0),X(2.0) 会被解析使用。
- 如果依赖路径长度一样,最先声明优先,例如:A->B->Y(1.0) 和 A->C->Y(2.0),依赖 B 声明在 C 前,所以 Y(1.0) 会被解析使用。
有时候不想使用某些传递性依赖,想自己配置该依赖的另一个版本,这就需要使用 <exclusions>
排除传递性依赖。
<project>
...
<dependencies>
<!--
<exclusions>: 用来排除传递性依赖
-->
<dependency>
<groupId>com.test</groupId>
<artifactId>A</artifactId>
<version>${A.version}</version>
<exclusions>
<exclusion>
<groupId>com.test</groupId>
<artifactId>B</artifactId>
</exclusion>
</exclusions>
</dependency>
...
</dependencies>
...
</project>