maven出现jar包冲突现象如何解决:
现象:
假设:spring-core:5.0.2项目正确
spring-core:4.2.4项目出错
创建一个maven工程:
maven工程创建完毕后
先导入一个spring-context,注意观察此时spring-core:5.0.2
再次导入spring-beans,此时spring-core:4.2.4,出错
原因:
导入的两个maven坐标对依赖的maven坐标产生影响。比如spring-context,spring-beans都会对spring-core产生影响,spring-core会根据不同情况产生不同的坐标,因后导入maven坐标影响了正常的项目坐标,产生报错。
解决问题:
1、第一声明者优先原则
观察:坐标位置
导入spring-beans,此时spring-core:4.2.4,出错
两者颠倒位置后:spring-core:5.0.2,正确了
只要明确你想要的位置即可:谁在前引用谁的坐标依赖
缺点:1.坐标位置固定不灵活2.引入坐标需要明白其依赖的坐标具体关系
2、路径近者优先原则
观察:坐标位置
导入spring-beans,此时spring-core:4.2.4,出错
添加了spring-core的直接依赖,spring-core:5.0.2,正确了
缺点:坐标数目会变多
3、排除依赖
观察:坐标位置
导入spring-beans,此时spring-core:4.2.4,出错
直接排除,此时spring-core:5.0.2,正确
缺点:坐标数目变多
4、锁定版本
面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版
本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定
的版本的为准添加到工程中,此方法在企业开发中常用。
由三大部分构成:
properties: 统一管理jar包版本
dependencyManagement:锁定jar包版本
dependecy:项目管理jar包
解决了上述所有的缺点,便于扩展