maven工程中jar包冲突原因
来个栗子:你买了一个四色笔,里面有红黄蓝黑四种颜色。还买了一根三色笔,是红紫绿。我想在书上做个标记,跟你借一下红颜色的笔,你会给我哪只呢?
当然你给我哪只我都能用,但是在maven中可就不行了。
例如导入以下jar包:
又引入以下jar包之后:
导入contextjar包的时候因为传递依赖也引入了beans,是5.0.2.RELEASE版本的,(为了演示效果)我又引入beans5.1.8.RELEASE之后,5.0.2.RELEASE版本的beans没有了,可是spring-context需要的是这个,这时候就产生了jar包冲突。
总结:jar包冲突的原因:传递依赖。
maven工程中jar包冲突解决方式
1、第一生命优先原则:哪个jar包的坐标在靠上的位置,这个jar包就是先声明的。先声明的jar包坐标下 的依赖包会优先进入项目中。
2、路径近者优先原则:直接依赖路径比传递依赖路径近,那么最终进入项目的jar包是路径近的直接依赖。
3、直接排除法【推荐使用方法】:添加exclusion标签,则其下的传递依赖jar包版本都和当前jar包版本相同。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
</dependency>
目前是学习,等以后实际开发中遇到jar包冲突的问题再来补充。