直接依赖:
A项目导入了B包,可以说A直接依赖B。
传递依赖:
A项目导入了B包,B包直接依赖于C,最终A项目中也可以使用C,可以说A传递依赖于C。
解决jar包冲突的三个原则:
1、第一声明优先原则
哪个包的坐标在靠上的位置,哪个就是第一声明的包,最终进入项目的就是哪个包的依赖版本。
2、路径近者优先原则
直接依赖路径比传递依赖路径近,哪个路径近,进入到项目中的就是哪个的依赖包。
3、直接排除法
使用exclusion标签直接来排除某个包下的依赖包。
1)第一声明优先原则案例:
导入spring-context和spring-beans依赖:
发现beans和context下都依赖了spring-core:
发现spring-core最终版本是4.2.6,使用了context下的包,因为context先声明的:
2)路径近者优先原则案例:
其实发现context中包含了beans包:
因为beans是直接依赖的,路径近context下的beans包,所以使用了5.0.5版本:
3)直接排除法案例:
context和beans中都包含了core包,由于在context中排除了core包,就算context先声明,最终core包使用的还是beans中的core包: