Maven依赖冲突的解决

xiaoxiao2025-10-19  8

在使用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啦。

转载请注明原文地址: https://www.6miu.com/read-5038213.html

最新回复(0)