博主
258
258
258
258

第五节 安装使用查找并解决Maven依赖的插件

亮子 2022-06-01 10:13:46 192 0 0 0

1、Java常见包冲突异常:

  • AbstractMethodError
  • NoClassDefFoundError
  • ClassNotFoundException
  • LinkageError

出现以上错误,大多数情况都是包的版本冲突导致的。

图片alt

2、冲突分析

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

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

Maven 对 pom 文件的传递性依赖自动进行管理, 其中有一个原则 绝对不允许最终的classpath出现同名不同版本的jar包 。

图片alt

Maven会根据pom文件中的groupId、artifactId、version来判断jar是否冲突,这就是规范约定的好处之一。

如果出现了同名不同版本的jar包,Maven的处理原则是 离你项目更近的jar包会被选中,其他的淘汰 , 这句话什么意思呢 请看下图:

图片alt

C包V0.2胜出,因为它离我们的项目更近,看图应该就感觉很直观啦,

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

3、处理冲突

1)、下载Idea插件 Maven Helper

File–>setting—>Plugins—>在搜索框中填写Maven Helper然后搜索,单击Install按钮进行安装,装完重启IDE。

Maven Helper

当Maven Helper 插件安装成功后,打开项目中的pom文件,下面就会多出一个视图Dependency Analyzer:

图片alt

切换到此试图即可进行相应操作:

  • Conflicts(查看冲突)
  • All Dependencies as List(列表形式查看所有依赖)
  • All Dependencies as Tree(树形式查看所有依赖)

当前界面上还提供搜索功能,方便使用。

图片alt

切换到maven 依赖视图选择冲突选项,如果有冲突,在左下面区域会有红色显示。

2)、解决冲突:

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

图片alt