直接依赖
A项目导入了B包,可以说A直接依赖B。
传递依赖
A项目导入了B包,B包直接依赖于C,最终A项目中也可以使用C,可以说A传递依赖于C。
解决jar包冲突的三个原则
第一声明优先原则
哪个包的坐标在靠上的位置,哪个就是第一声明的包,最终进入项目的就是哪个包的依赖版本。
导入spring-context和spring-beans依赖:

发现beans和context下都依赖了spring-core:

发现spring-core最终版本是4.2.6,使用了context下的包,因为context先声明的:

路径近者优先原则
直接依赖路径比传递依赖路径近,哪个路径近,进入到项目中的就是哪个的依赖包。
按照上面的案例进行分析,发现context中包含了beans包:

因为beans是直接依赖的,路径比context下的beans包近,所以使用了5.0.5版本:

直接排除法
使用exclusion标签直接来排除某个包下的依赖包。
还是安装上面的案例进行分析,context和beans中都包含了core包,由于在context中排除了core包,就算context先声明,最终core包使用的还是beans中的core包:

在IDEA中解决Jar包冲突
首先安装IDEA下的一款插件:Maven Helper



在视图中分析与排除:
针对红色的部分,右键选择exclude就可以了。

排除冲突后刷新一下,会自动添加排除标签:

最后来一个总图。

本文介绍了解决Java项目中Jar包冲突的三个原则:第一声明优先、路径近者优先及直接排除法,并演示了如何在IDEA中使用MavenHelper插件解决实际问题。
8305

被折叠的 条评论
为什么被折叠?



