Maven 依赖排除插件
# Maven 依赖排除插件
前言
在使用 IntelliJ IDEA 进行 Java 项目开发时,Maven Helper
一直以来都是一个非常受欢迎的插件。它提供了通过 UI 界面查看和管理 Maven 依赖关系的功能,使得处理依赖冲突更加直观且高效。下面我们详细探讨下 Maven Helper 的功能及其在 IDEA 2022.1 发布后的发展变化。
# Maven Helper 是什么?
Maven Helper 是一个为 IntelliJ IDEA 提供的插件,它允许开发者通过图形化界面来分析和管理 Maven 项目的依赖关系。由于 Maven 是 Java 项目中最常用的构建工具,因此 Maven Helper 几乎是一个必装插件。从插件的评分来看,它是评分最高的插件之一,功能非常优秀。
# Maven Helper 的核心功能
依赖分析与冲突解决
安装好插件后,在打开
pom.xml
文件时,你会在左下角看到多了一个Dependency Analyzer
选项:点击这个选项即可进入 Maven Helper 的功能界面,其中红色的 jar 包表示未被使用:
如上图所示,
commons-lang
和jackson-core
存在依赖冲突。以jackson-core
为例,来解释冲突原因及为什么最终仲裁为 2.9.9 版本:原因:此依赖存在多个路径,且版本号不一致。
pom.xml
中直接引入的版本号为 2.9.9:- 通过
jackson-databind
间接引入的版本号为 2.11.3(jackson-databind
的版本号为 2.9.9):
- 解释:由于直接依赖的路径长度为 1,而通过
jackson-databind
间接依赖的路径长度为 2,因此根据路径最短者优先的原则,最终仲裁出版本号为 2.9.9。
解决冲突:如果你想让 2.11.3 版本生效,或者避免所有冲突,使用
exclude
功能是一个不错的选择。在 Maven Helper 中,你可以通过右键操作轻松排除依赖:点击
Exclude
后的效果如下:插件会自动帮你添加
exclusion
部分。刷新视图后,你会看到冲突已经被完美解决:
查询某个 jar 的来源
例如,你想查看
neo4j-java-driver
是通过什么途径被引入的,可以使用如下方式查看:快速执行 Maven 命令
尽管 IDEA 提供的 Maven 视图已经很好用,但 Maven Helper 依然可以让你通过图形界面快速执行常用命令:
其他功能如展示依赖关系图、在当前位置快速启动命令行等在实用性上略逊一筹,这里就不再赘述。
# Dependency Analyzer
2022 年 4 月 26 日,JetBrains 发布了 IntelliJ IDEA 2022.1,这是一个大版本更新,其中最受关注的功能之一就是新增了 Dependency Analyzer
,用于图形化管理依赖和解决冲突。
# Dependency Analyzer的核心功能
打开 IDEA 的 Maven 视图,点击依赖分析按钮,即可进入依赖分析窗口:
这个窗口顶部有多个选项,逐一说明如下:
选择 Maven 模块:适用于多模块项目,可按模块处理依赖关系。
选择 Scope:默认显示所有范围的依赖项。
是否显示 GroupId:一般情况下 GroupId 并不需要显示,因此默认情况下此选项是未选中的。
是否只显示有冲突的依赖:
# IDEA 的冲突处理能力
IDEA 的依赖冲突显示方式与 Maven Helper 有一些不同:
- 左边显示的是已经解决的依赖。
- 右边显示的是选中依赖的使用情况(如它是通过哪个路径被引入的,路径长度等)。
以下是最终生效的版本号展示,与 Maven Helper 的方式有所不同:
相比 Maven Helper,笔者认为 IDEA 的这种显示方式更加直观。
不过,IDEA 的小缺陷在于:当你需要通过 exclusion
方式解决冲突时,它并不能一键完成,而是需要手动导航到问题处进行修改:
你认为 IDEA 未来会将该功能加上吗?
使用 IDEA 自带的依赖分析器时,打开 pom.xml
文件并不会像 Maven Helper 那样新增一个 tab,而是保持原样:
另外,值得一提的是:IDEA 的 Dependency Analyzer 功能不仅适用于 Maven,还适用于 Gradle。