直接依赖:

A项目导入了B包,可以说A直接依赖B。

传递依赖:

A项目导入了B包,B包直接依赖于C,最终A项目中也可以使用C,可以说A传递依赖于C。

解决jar包冲突的三个原则:

1、第一声明优先原则

哪个包的坐标在靠上的位置,哪个就是第一声明的包,最终进入项目的就是哪个包的依赖版本。

2、路径近者优先原则

直接依赖路径比传递依赖路径近,哪个路径近,进入到项目中的就是哪个的依赖包。

3、直接排除法

使用exclusion标签直接来排除某个包下的依赖包。

1)第一声明优先原则案例:
导入spring-context和spring-beans依赖:
Maven 导入 jar 包冲突的解决方案
发现beans和context下都依赖了spring-core:
Maven 导入 jar 包冲突的解决方案
发现spring-core最终版本是4.2.6,使用了context下的包,因为context先声明的:
Maven 导入 jar 包冲突的解决方案
2)路径近者优先原则案例:
其实发现context中包含了beans包:
Maven 导入 jar 包冲突的解决方案
因为beans是直接依赖的,路径近context下的beans包,所以使用了5.0.5版本:
Maven 导入 jar 包冲突的解决方案

3)直接排除法案例:
context和beans中都包含了core包,由于在context中排除了core包,就算context先声明,最终core包使用的还是beans中的core包:
Maven 导入 jar 包冲突的解决方案

相关文章: