Maven依赖冲突的解决

在使用IDEA开发比较大的Spring web项目的时候,常常会在pom文件中导入大量依赖,所以就有可能造成Maven的依赖冲突。下面来看一下如何解决Maven的依赖冲突。


1. 先清当前的jar包的缓存:

IDEA的 File选项 -> invalidate caches/restart

2. 打印Maven的依赖树:

mvn dependency:tree
(建议将内容重定向到一个file里,方便查看,如:mvn dependency:tree > file.txt)
Maven的依赖树的样式如下,图中圈出了一个包与其下所有子包的层级关系:Maven依赖冲突的解决_第1张图片

3. 定位产生依赖冲突的子包:

比如新加了xxx包之后,产生了依赖冲突,那么在file.txt依次全文搜索xxx包下依赖的所有子包,看看是否由别的包也依赖此子包。
如果在别的包(比如yyy包和zzz包)下面也发现有该子包,那么说明需要在xxx包、yyy包、zzz包其中两个包下排除这个子包的依赖,只保留一个包下的该子包的依赖。
那么,具体应该保留哪个包下的子包呢,这是由这几个包下的所依赖的该子包的版本号决定的。我们一般会选择保留版本比较高的子包。
比如xxx包下该子包的版本是1.0.0,yyy包下该子包的版本是1.0.1,zzz包下该子包的版本是1.0.2,那么说明需要保留该子包的是zzz包,需要将xxx包和yyy包下的子包依赖排除。
排除依赖所用的标签是:
在pom文件下找到xxx包和yyy包的依赖,在标签里加上冲突的子包,如下:


  xxx包的groupId
  xxx包的artifactId
  xxx包的版本号
  
      
          冲突的子包的groupId
          冲突的子包的artifactId
      
  



  yyy包的groupId
  yyy包的artifactId
  yyy包的版本号
  
      
          冲突的子包的groupId
          冲突的子包的artifactId
      
  

需要注意的是依赖传递问题。也就是说,加入的xxx包下的子包的子包也可能存在依赖冲突,即要将xxx包下每一个层级的包都检测一遍是否存在依赖冲突,以免漏掉依赖传递问题。

4. 解决完之后重新打包:

mvn clean install,再部署就OK啦。

你可能感兴趣的:(Java)