欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-02-26 15:01:16
1、何为依赖冲突 maven是个很好用的依赖管理工具,但是再好的东西也不是完美的。maven的依赖机制会导致jar包的冲突。举个例子,现在你的项目中,使用了两个jar包,...

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>标签内部,就像下面这样:

<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插件冲突的方法

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