提示:本文主要介绍了一种自研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.youkuaiyun.com/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.youkuaiyun.com/download/wangchl0932/86782940
本文介绍了如何使用一款自研的IDEA插件来简化Maven依赖冲突的解决过程。插件通过依赖管理策略,自动处理jar包冲突,并提供了一键操作的功能。用户只需在项目或pom.xml上右键选择相应选项,即可生成dependencyManagement片段,有效避免NoSuchMethodError、ClassNotFoundException等错误。此外,文中还提到了maven命令行和MavenHelper插件作为冲突分析的辅助工具。
3204

被折叠的 条评论
为什么被折叠?



