Maven的依赖调解机制
1.如果存在App->A->B-0.9, 又存在App->C->D->B-1.0,那App在打包时会不会把B-0.9和B-1.0都纳入进来?如果不会,倒底选择哪个B?
答案:只会纳入一个,即B-0.9,因为它离App较近(中间只隔了一个A,B-1.0和App之间则隔了D,C两个)
2.App到B存在两条依赖路径,怎么识别这种情况?
答案: mvn dependency:tree
-Dverbose,它会显示哪些项目由于这种情况而被“omitted for conflict”
3.B-0.9被选中,会不会导致依赖B-1.0的D在运行时出错?
答案:会的。如果D依赖了B-1.0中有而B-0.9里没有的东西,就会在运行时出错
4.那该怎么办?
答案:
办法1. 在App的pom里,屏蔽掉A对B的依赖
<dependency> <groupId>kent.learn</groupId> <artifactId>maven-a</artifactId> <exclusions> <exclusion> <groupId>kent.learn</groupId> <artifactId>maven-b</artifactId> </exclusion> </exclusions> </dependency>
办法2. 让App直接依赖B-1.0,让其他的对B的传递依赖都失效