依赖传递
场景:A工程 依赖于B工程,而B工程 依赖于C工程
需要:A可以看 C 呢
节点:B引入的C的作用范围,也就是设置B工程pom中的C avg 的 scope取值
如下:
<dependency>
<groupId>com.example</groupId>
<artifactId>testcc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
依赖原则
如果确实有依赖传递,并且有冲突怎么办,有如下原则
路径最短优先原则
存在两个项目依赖同个类型但不同版本的jar包,这个时候会优先选择路径短的
A -- B -- C 1.0版本
A -- C 2.0版本
C的2.0版本生效
路径长度相同:同一个pom后边覆盖;不同pom先引入的优先
A的pom中先后引入了B1.0 B2.0版本,那么2.0会覆盖1.0。 -- 2.0生效
A 的pom中先后引入B、C
B 引入 D1.0
C 引入 D2.0
那么 B中的D1.0版本会优先使用, C中的D2.0版本不会生效 -- D1.0版本生效
问题:如果C使用了D2.0的特征了, 但此时工程中只有D1.0版本
解决:调整顺序;控制依赖传递,有目的加入D的版本。
技术:
mvn dependency:tree 打印依赖树
avg scop 控制 依赖传递
avg exclusions 排除依赖,如果是第三方jar包没法修改scop,就手动排除掉
参考:https://www.cnblogs.com/LaiCuiTing/p/9542525.html