IDEA 利用Maven依赖图解决包冲突

  |  
阅读次数
  |  
字数 635
  |  
时长 ≈ 2 分钟

当我们试图向Maven项目里添加新依赖时,经常会遇到新依赖包与旧依赖包产生冲突的问题,如下图所示:

这里面,因为有两个包里面都包含完整路径为org/slf4j/impl/StaticLoggerBinder.class的类,所以导致系统不知道使用哪一个,从而启动失败,
所以,我们只需要将这两个包其中一个去除即可,现在让我们使用IDEA的一个小功能来完美解决这个包冲突问题吧。

1.打开Maven依赖图

我们打开我们Maven项目的pom.xml文件,在文件编辑界面右击鼠标弹出右击菜单,
然后依次选择Diagrams -> Show Dependencies,展示Maven依赖图。

点击后我们所看到的界面如下:

2.定位问题依赖

我们在Maven依赖图界面,按ctrl+f键,进行依赖搜索,
我们将依次搜索我们在控制台里面出现的两个jar包,分析其依赖。
首先,我们先搜索logback-classic,它对于我们的第一个报错提示,界面会出现匹配的依赖,我们不用打全称,当你看到相应的包名的时候,直接点击选项即可。

点击后我们就可以看到视图已经自动定位到所选的包名的位置,

从这里,我们可以看到,logback-classic包被我们之前导入的springboot-starter-logging这个日志启动器所引用,
这里它属于这个启动器必要的一部分,所以我们先放着不管,继续搜索第二个依赖包slf4j-log4j12

继续点击对应选项,我们看到了其有4个依赖

我们看到了slf4j-log4j12这个包被我们导入的zookeeper所引用,这里因为是中间件引用的,所以我们可以将这个移除。

3.移除问题依赖

我们选中slf4j-log4j12,右击鼠标,可以看到右击菜单里面有一个Exclude选项,我们点击Exclude,去除该依赖,

点击完成后,我们可以看到zookeeper的依赖由原来的4个变为现在的3个

4.验证结果

最后,我们返回我们的pom.xml文件,搜索zookeeper,定位到zookeeper的依赖块,

我们可以看到zookeeper的依赖块已经顺利加上了<exclusion>标签,并且里面也已经指明了排除的冲突依赖包。
到这里,我们就已经成功排除了Maven的依赖包冲突问题,重新运行程序即可。