使用Maven Helper解决Maven插件冲突的方法

时间:2022-10-19 15:30:43

1、何为依赖冲突

maven是个很好用的依赖管理工具,但是再好的东西也不是完美的。maven的依赖机制会导致jar包的冲突。举个例子,现在你的项目中,使用了两个jar包,分别是a和b。现在a需要依赖另一个jar包c,b也需要依赖c。但是a依赖的c的版本是1.0,b依赖的c的版本是2.0。这时候,maven会将这1.0的c和2.0的c都下载到你的项目中,这样你的项目中就存在了不同版本的c,这时maven会依据依赖路径最短优先原则,来决定使用哪个版本的jar包,而另一个无用的jar包则未被使用,这就是所谓的依赖冲突。

在大多数时候,依赖冲突可能并不会对系统造成什么异常,因为maven始终选择了一个jar包来使用。但是,不排除在某些特定条件下,会出现类似找不到类的异常,所以,只要存在依赖冲突,在我看来,最好还是解决掉,不要给系统留下隐患。

2、解决方法

解决依赖冲突的方法,就是使用maven提供的<exclusion>标签,<exclusion>标签需要放在<exclusions>标签内部,就像下面这样:

?
1
2
3
4
5
6
7
8
9
10
11
<dependency>
 <groupid>org.apache.logging.log4j</groupid>
 <artifactid>log4j-core</artifactid>
 <version>2.10.0</version>
 <exclusions>
 <exclusion>
 <artifactid>log4j-api</artifactid>
 <groupid>org.apache.logging.log4j</groupid>
 </exclusion>
 </exclusions>
</dependency>

log4j-core本身是依赖了log4j-api的,但是因为一些其他的模块也依赖了log4j-api,并且两个log4j-api版本不同,所以我们使用<exclusion>标签排除掉log4j-core所依赖的log4j-api,这样maven就不会下载log4j-core所依赖的log4j-api了,也就保证了我们的项目中只有一个版本的log4j-api

3、maven helper

看到这里,你可能会有一个疑问。如何才能知道自己的项目中哪些依赖的jar包冲突了呢?maven helper这个intelij idea的插件帮我们解决了这个问题。插件的安装方法我就不讲了,既然你都会maven了,我相信你也是会安装插件的。

在插件安装好之后,我们打开pom.xml文件,在底部会多出一个dependency analyzer选项

使用Maven Helper解决Maven插件冲突的方法

点开这个选项

使用Maven Helper解决Maven插件冲突的方法

找到冲突,点击右键,然后选择exclude即可排除冲突版本的jar包。

4、小技巧

除了使用maven helper查看依赖冲突,也可以使用idea提供的方法——maven依赖结构图,打开maven窗口,选择dependencies,然后点击那个图标(show dependencies)或者使用快捷键(ctrl+alt+shift+u),即可打开maven依赖关系结构图

使用Maven Helper解决Maven插件冲突的方法

在图中,我们可以看到有一些红色的实线,这些红色实线就是依赖冲突,蓝色实线则是正常的依赖。

使用Maven Helper解决Maven插件冲突的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://segmentfault.com/a/1190000017542396