如何解决Maven依赖冲突

一、Java常见包冲突异常:

AbstractMethodError
NoClassDefFoundError
ClassNotFoundException
LinkageError

二、冲突分析如何解决Maven依赖冲突_第1张图片

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

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

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

如果出现了同名不同版本的jar包,Maven的处理原则是 离你项目更近的jar包会被选中,其他的淘汰 , 这句话什么意思呢 请看下图:
如何解决Maven依赖冲突_第3张图片
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依赖冲突_第4张图片
当Maven Helper 插件安装成功后,打开项目中的pom文件,下面就会多出一个视图Dependency Analyzer:
如何解决Maven依赖冲突_第5张图片
切换到此试图即可进行相应操作:
Conflicts(查看冲突)
All Dependencies as List(列表形式查看所有依赖)
All Dependencies as Tree(树形式查看所有依赖)

当前界面上还提供搜索功能,方便使用。
如何解决Maven依赖冲突_第6张图片
切换到maven 依赖视图选择冲突选项,如果有冲突,在左下面区域会有红色显示。

2、解决冲突:

方法1:更换兼容版本
方法2:右键单击红色区域,弹出菜单选择Exclude命令,对冲突进行排除。
如何解决Maven依赖冲突_第7张图片

你可能感兴趣的:(Java,maven,intellij-idea)