Spring 03-如何解决依赖冲突

基本概念

依赖冲突:依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突

依赖冲突的范围:发生管理Jar包的框架,比如Maven和Gradle,这里以Maven为例子

依赖冲突发生的典型例子(主要原因)

依赖冲突很经常是类包之间的间接依赖引起的。每个显式声明的类包都会依赖于一些其它的隐式类包,这些隐式的类包会由Maven间接引入进来,从而造成类包冲突

依赖原则

1.路径不同间接依赖中maven采用的是路径最短者优先

2.路径相同间接依赖中maven 采用的是依赖定义顺序从上到下

解决依赖冲突的方案

方法1:自己主管的处理好版本关系,Maven会从上到下,优先相同jar的最前面写的版本

好处:如果需要用下面的版本,直接将前面的删掉就行

不足:需要对项目的模式十分清楚,不然删错jar包会造成各类问题 

方法2:最直接的方法就是找到冲突的jar,然后用exclusion标签将冲突,也就是不需要的jar给排除掉。

 好处:最直接有效的方式解决依赖冲突

不足:如果jar非常多,比如企业级项目,需要花大量时间写代码以及思考依赖关系。所以这个方法实用但成本高。

方法3:单独为依赖库添加 dependency 指定版本

将打包好的jar全部拆开,然后按照需要自己重新导入这些jar包

 

 比如srping-webmvc这个jar包,里面由一整套spring的mvc需要的依赖包,根据依赖关系和依赖注入的概念,我们可以将这个父jar包拆开一个一个导里面的子jar。

方法4:使用 dependencyManagement 锁定依赖库的版本号(推荐)

 

 

这种方式十分适合多模块编程,总的父项目去写所有的jar包括版面,然后通过modules标签将 子模块导入,子模块只需要导入jar名就行,而不用导入版本号,这样整个项目的jar都集中在父项目的pom文件去管理,子模块也不用担心依赖冲突,因为需要什么导什么但不管版本。

总结

依赖冲突是做项目中必须要注意的问题,否则整个项目会连运行都无法实现。个人推荐使用版本锁定的方法,dependencyManagement只是声明依赖,并不自动实现引入,因此子项目需要显示的声明需要用的依赖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值