提示:本文主要介绍了一种自研IDEA插件,一键解决maven依赖冲突


背景

日常开发过程中解决maven依赖是件比较令人头疼的问题

未能及时发现并解决依赖冲突可能会让你的程序存在潜在的线上隐患,常见程序错误如下:

Caused by:java.lang.NoSuchMethodError
Caused by: java.lang.ClassNotFoundException
Caused by: java.lang.NoClassDefFoundError

一、依赖冲突原因

依赖冲突主要由于依赖传递引起的。每个显式声明的类包都会依赖于一些其它的隐式类包,这些隐式的类包会被maven间接引入进来,从而造成类包冲突。

maven依赖原则

  • 依赖管理优先
    优先按照dependencyMangement元素中指定的版本声明
  • 最短路径优先
    按照依赖传递关系,使用最近依赖版本
 A
  ├── B
  │   └── C
  │       └── D 2.0
  └── E
      └── D 1.0

D 1.0 在构建中将被使用

  • 声明顺序优先
    路径相同则按照依赖在pom.xml中被声明的顺序决定,定义在pom.xml顺序靠前的版本生效

三、分析冲突jar包

1. maven 命令方式

mvn -Dverbose dependency:tree

[INFO] +- org.elasticsearch.client:transport:jar:7.12.0:compile
[INFO] |  +- (org.elasticsearch:elasticsearch:jar:6.4.3:compile - version managed from 7.12.0; omitted for conflict with 7.12.0)
[INFO] |  +- (org.elasticsearch.plugin:transport-netty4-client:jar:6.4.3:compile - version managed from 7.12.0; omitted for duplicate)
[INFO] |  +- org.elasticsearch.plugin:reindex-client:jar:7.12.0:compile
[INFO] |  |  +- (org.elasticsearch.client:elasticsearch-rest-client:jar:6.4.3:compile - version managed from 7.12.0; omitted for conflict with 7.12.0)
[INFO] |  |  \- org.elasticsearch:elasticsearch-ssl-config:jar:7.12.0:compile
[INFO] |  |     \- (org.elasticsearch:elasticsearch-core:jar:7.12.0:compile - omitted for duplicate)
[INFO] |  +- (org.elasticsearch.plugin:lang-mustache-client:jar:7.12.0:compile - omitted for duplicate)
[INFO] |  +- org.elasticsearch.plugin:percolator-client:jar:7.12.0:compile
[INFO] |  +- (org.elasticsearch.plugin:parent-join-client:jar:7.12.0:compile - omitted for duplicate)
[INFO] |  \- (org.elasticsearch.plugin:rank-eval-client:jar:7.12.0:compile - omitted for duplicate)

其中omitted for duplicate表示有jar包被重复依赖
omitted for conflict with 表示该jar包与其他引入jar存在版本冲突

2. Maven Helper 插件

文章推荐 https://blog.csdn.net/GyaoG/article/details/120599475

3. 一键解决jar冲突插件

本插件为自研插件,参考了58开源插件MavenManager , 主要采用依赖管理方式(dependencyManagement),一键解决maven项目中的jar包冲突 下载地址 :EliminateMavenConflicts-1.0.jar

适用版本 2021.*

如果遇到不兼容情况可自行修改

安装方式

由于未发布到市场,只能采用IDEA 安装本地插件的方式
本地安装IEAD插件

使用方式

选中project (或者 pom.xml) ——> 右键 —— > EliminateConflicts
在这里插入图片描述

使用后效果

在当前pom.xml 中自动排除jar冲突,添加dependencyManagement 片段,如有父子项目可将相关片段copy到父工程中,如下:

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.google.code.findbugs</groupId>
                <artifactId>jsr305</artifactId>
                <version>3.0.2</version>
            </dependency>
            <dependency>
                <groupId>com.google.errorprone</groupId>
                <artifactId>error_prone_annotations</artifactId>
                <version>2.1.3</version>
            </dependency>
            <dependency>
                <groupId>com.google.inject</groupId>
                <artifactId>guice</artifactId>
                <version>4.1.0</version>
            </dependency>
            <dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-java</artifactId>
                <version>3.9.0</version>
            </dependency>
       </dependencies>
</dependencyManagement>

在这里插入图片描述

本文主要为大家介绍了一种自研IDEA maven依赖冲突解决插件

https://download.csdn.net/download/wangchl0932/86782940

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐