Maven中解决依赖冲突的问题
1.短路优先:谁离得最近就使用谁的依赖jar包
C到达A为C->B->A
C到达B为C->B
例如:
A中的 commons-io的版本为2.4
B中的commons-io的版本为2.0
C中依赖于B,B依赖于A
则C的junit的包为2.0版本
因为依赖的短路优先
2.如果两条路都是一样长的时候呢?
C到达A为C->A
C到达B为C->B
则看pom文件中依赖的两个工程谁在前面就是用哪个版本
例如:
这里使用的common-io为2.4版本
<dependency> <groupId>org.lonecloud.A</groupId> <artifactId>A</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!--C依赖于B但是会将A的依赖传递进来 --> <dependency> <groupId>org.lonecloud.B</groupId> <artifactId>B</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 此标签的作用是可以将B的传递依赖关系A不传递给C --> <!-- <exclusions> <exclusion> <groupId>org.lonecloud.A</groupId> <artifactId>A</artifactId> </exclusion> </exclusions> --> </dependency>
C文件中添加了A和B的依赖项的时候谁最先加载则使用谁的jar包
下面使用的是2.0的版本,也就是B中的jar包
<dependency> <groupId>org.lonecloud.B</groupId> <artifactId>B</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 此标签的作用是可以将B的传递依赖关系A不传递给C --> <!-- <exclusions> <exclusion> <groupId>org.lonecloud.A</groupId> <artifactId>A</artifactId> </exclusion> </exclusions> --> </dependency> <dependency> <groupId>org.lonecloud.A</groupId> <artifactId>A</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>