1 什么是依赖冲突
首先先看图
由于依赖传递现象的存在, spring-beans-4.2.4 依赖 spirng-core-4.2.4,而spring-context-5.0.2 依赖 spring-beans-5.0.2,但
到底项目spirng-core加入到了工程中使用的是什么版本?这就造成了依赖冲突。
2. 如何解决依赖冲突
1.使用maven提供的依赖调解原则
1.1 第一声明者优先原则
在 pom 文件中定义依赖,以先声明的依赖为准。其实就是根据坐标导入的顺序来确定最终使用哪个传递过来的依赖。
例如:
结论:通过上图可以看到,spring-beans和spring-context都传递过来了spirng-core,但是因为spring-context在前面,所以最终使用的spirng-core是由spring-context传递过来的,而spring-beans传递过来的spirng-core则被忽
略了。
1.2 路径近者优先原则
2.排除依赖(推荐使用)
可以使用exclusions标签将传递过来的依赖排除出去。
3.锁定版本
面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定
的版本的为准添加到工程中,此方法在企业开发中常用。
版本锁定的使用方式:
第一步:在dependencyManagement标签中锁定依赖的版本
第二步:在dependencies标签中声明需要导入的maven坐标
①在dependencyManagement标签中锁定依赖的版本
②在dependencies标签中声明需要导入的maven坐标