如何解决Maven依赖冲突

一、Java常见包冲突异常:

AbstractMethodError
NoClassDefFoundError
ClassNotFoundException
LinkageError

二、冲突分析在这里插入图片描述

像上图,就发生了包引用冲突,如果C包v0.1版本在前,JVM加载过v0.1版本里的同名类后就不会加载v0.2里的同名类,这很可能造成丢失了v0.2里同类里新增的方法属性等等。

接下来我们看看Maven对这种情况是如何进行管理的。

Maven 对 pom 文件的传递性依赖自动进行管理, 其中有一个原则 绝对不允许最终的classpath出现同名不同版本的jar包 。
在这里插入图片描述
Maven会根据pom文件中的groupId、artifactId、version来判断jar是否冲突,这就是规范约定的好处之一。

如果出现了同名不同版本的jar包,Maven的处理原则是 离你项目更近的jar包会被选中,其他的淘汰 , 这句话什么意思呢 请看下图:
在这里插入图片描述
C包V0.2胜出,因为它离我们的项目更近,看图应该就感觉很直观啦,

最终的classpath就是 A包、B包、D包、C包v0.2, Maven将C包v0.1排除掉啦。

三、处理冲突

1、下载Idea插件 Maven Helper

File–>setting—>Plugins—>在搜索框中填写Maven Helper然后搜索,单击Install按钮进行安装,装完重启IDE。在这里插入图片描述
当Maven Helper 插件安装成功后,打开项目中的pom文件,下面就会多出一个视图Dependency Analyzer:
在这里插入图片描述
切换到此试图即可进行相应操作:
Conflicts(查看冲突)
All Dependencies as List(列表形式查看所有依赖)
All Dependencies as Tree(树形式查看所有依赖)

当前界面上还提供搜索功能,方便使用。
在这里插入图片描述
切换到maven 依赖视图选择冲突选项,如果有冲突,在左下面区域会有红色显示。

2、解决冲突:

方法1:更换兼容版本
方法2:右键单击红色区域,弹出菜单选择Exclude命令,对冲突进行排除。
在这里插入图片描述

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值