2. maven依赖 dependency:
groupId、artifactId、version 依赖的基本坐标
type 依赖的类型,对应packaging坐标,默认为jar
optional 标记依赖是否可选
exclusions 用来排除传递性依赖
scope 依赖的范围,用来控制依赖与3中classpath的关系(编译classpath,测试classpath,运行classpath)
compile 编译依赖范围(默认),对编译、测试、运行三种classpath都有效
test 测试依赖范围 对测试classpath有效
provided以提供依赖范围 对编译、测试两种classpath有效
runtime 运行时依赖范围 对测试、运行两种classpath有效
system 系统依赖范围 对编译、测试两种classpath有效
使用时必须通过systemPath元素指定依赖文件的路径,
依赖的文件不是由Maven仓库管理,是在本级系统中。
<scope>system</scope>
<systemPath>c:/aaa.jar</systemPath>
import 导入依赖范围,不会对三种classpath产生实际的影响
2.1 传递性依赖
A依赖于B,B依赖于C,A对于B是第一直接依赖,B对于C是第二直接依赖,A对于C是传递性依赖。
第一直接依赖和第二直接依赖的依赖范围决定了传递性依赖的范围。
2.2 依赖调解
A->B->C(1.0),E->C(2.0)
X->Y(1.0),Z->Y(2.0)
原则1:路径最近者优先
原则2:第一生命者优先
经maven依赖调解后,不可能出现groupId和artifactId相同,version不同的两个依赖
mvn dependency:list 依赖列表
mvn dependency:tree 依赖树
mvn dependency:analyze 分析依赖
2.3 可选依赖
A依赖于B,B依赖与X或Y,X和Y都是可选依赖。
可选依赖不会传递
<dependency>
<groupId>xxx</groupId>
<artifactId>mysql</artifactId>
<version>5.0</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>xxx</groupId>
<artifactId>oracle</artifactId>
<version>10g</version>
<optional>true</optional>
</dependency>
2.4 排除依赖
A依赖于B,B依赖于C1,C1不稳定,在A对B的依赖配置中排除B对C1的依赖,再配置一个稳定的C2依赖
<dependency>
<groupId>xxx</groupId>
<artifactId>oracle</artifactId>
<version>10g</version>
<exclusions>
<exclution>
<groupId>xxx</groupId>
<artifactId>C1</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>xxx</groupId>
<artifactId>C2</artifactId>
<version>1.0</version>
</dependency>