Maven依赖冲突的解决 - Go语言中文社区

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的依赖树的样式如下,图中圈出了一个包与其下所有子包的层级关系:在这里插入图片描述

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包的依赖,在标签里加上冲突的子包,如下:

<dependency>
  <groupId>xxx包的groupId</groupId>
  <artifactId>xxx包的artifactId</artifactId>
  <version>xxx包的版本号</version>
  <exclusions>
      <exclusion>
          <groupId>冲突的子包的groupId</groupId>
          <artifactId>冲突的子包的artifactId</artifactId>
      </exclusion>
  </exclusions>
</dependency>

<dependency>
  <groupId>yyy包的groupId</groupId>
  <artifactId>yyy包的artifactId</artifactId>
  <version>yyy包的版本号</version>
  <exclusions>
      <exclusion>
          <groupId>冲突的子包的groupId</groupId>
          <artifactId>冲突的子包的artifactId</artifactId>
      </exclusion>
  </exclusions>
</dependency>

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

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

mvn clean install,再部署就OK啦。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/dela_/article/details/83386258
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢