直接依赖
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就可以了。
排除冲突后刷新一下,会自动添加排除标签:
最后来一个总图。