一键解决maven依赖冲突IDEA插件
提示:本文主要介绍了一种自研IDEA插件,一键解决maven依赖冲突。
提示:本文主要介绍了一种自研IDEA插件,一键解决maven依赖冲突
一键解决maven依赖冲突-IDEA插件
背景
日常开发过程中解决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 安装本地插件的方式
使用方式
选中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
更多推荐
所有评论(0)