《Maven实战》笔记 2.5 - 依赖的调解
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的传递依赖都失效