解决jar包冲突问题
1、引入问题
1.1、导入jar包时maven会自动将该jar包所依赖的jar包也一起导入进来,比如spring-context依赖spring-beans、spring-beans依赖spring-core,在导入spring-context时会同时自动导入spring-beans、spring-core
1.1.1、maven依赖
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.2.RELEASE</version> </dependency> </dependencies>
1.1.2、导入的jar包
1.2、我想引入spring-beans的其它版本,但是不想引入spring-context自动导入的spring-beans版本,该怎样做?
1.3、我想引入spring-core的其它版本,但是不想引入spring-context或者spring-beans自动导入的spring-core版本,该怎样做?
2、解决jar包冲突的方法
2.1、第一声明优先
2.1.1、maven依赖和导入的jar包
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.3.26.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.2.RELEASE</version> </dependency> </dependencies>
总结:spring-beans写在spring-context前面,那么spring-beans所依赖的jar包优先于spring-context所依赖的jar包,所以,spring-core是4.3.26.RELEASE版本
2.1.2、maven依赖和导入的jar包
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.3.26.RELEASE</version> </dependency> </dependencies>
总结:spring-context写在spring-beans前面,则优先使用spring-context依赖的spring-core的版本,所以这里spring-core的版本是5.0.2.RELEASE
2.2、路径近者优先
2.2.1、maven依赖和导入的jar包
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.3.26.RELEASE</version> </dependency> </dependencies>
总结:虽然spring-context依赖spring-beans,且spring-context写在spring-beans 4.3.26.RELEASE前面,但是spring-beans 4.3.26.RELEASE的路径优先于spring-context所依赖的spring-beans,所以这里spring-beans的版本是4.3.26.RELEASE。根据第一声明优先规则,这里spring-core的版本是5.0.2.RELEASE
2.3、直接排除法
2.3.1、maven和导入的jar包
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.2.RELEASE</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.3.26.RELEASE</version> </dependency> </dependencies>
总结:spring-context在spring-beans 4.3.26.RELEASE前面,原则上会优先导入spring-context依赖的spring-core版本,但是这里使用exclusions排除了spring-context中的spring-core,所以这里导入的还是spring-beans 4.3.26.RELEASE中依赖的spring-core版本