最直接有效的方式是用mvn dependency:tree -Dverbose命令精准定位冲突源头,它显示所有版本(含被排除的),标出“omitted for conflict”行,并揭示仲裁依据(如最近路径优先),结合-Dincludes过滤和导出文件可快速追溯引入路径。

Java 中排查 Maven 依赖冲突,最直接有效的方式不是靠猜,而是用 maven-help-plugin 的 dependency:tree 命令精准定位源头路径。它能清晰展示每个依赖是从哪条路径引入的,尤其标出被排除(omitted for conflict)的版本,一眼锁定冲突根因。
查看完整依赖树并识别冲突节点
在项目根目录执行:
mvn dependency:tree -Dverbose
-Dverbose 是关键参数,它会让 Maven 显示所有版本(包括被仲裁掉的),而不仅是最终生效的版本。输出中出现 omitted for conflict 的行,就是冲突的“受害者”——它被另一个版本顶替了,但它的存在恰恰说明冲突已发生。
例如:
立即学习“Java免费学习笔记(深入)”;
[INFO] +- com.example:service-api:1.2.0 [INFO] | \- org.apache.commons:commons-lang3:3.12.0 [INFO] +- org.springframework.boot:spring-boot-starter-web:3.2.5 [INFO] | \- org.apache.commons:commons-lang3:3.11.0 (omitted for conflict)
这表示:项目直接依赖了 service-api 引入的 commons-lang3:3.12.0,而 Spring Boot 传递引入的 3.11.0 被排除了。冲突源头路径就是 spring-boot-starter-web → commons-lang3:3.11.0。
聚焦特定依赖,快速追溯所有引入路径
当项目依赖繁杂时,全量树太长。可直接过滤目标 groupId 和 artifactId:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 查某个库的所有引用路径:
mvn dependency:tree -Dincludes=org.apache.commons:commons-lang3 - 查某个组织下的全部依赖:
mvn dependency:tree -Dincludes=org.springframework: - 结合 grep 精准定位(Linux/macOS):
mvn dependency:tree -Dverbose | grep "commons-lang3"
输出会列出每一条到达该依赖的完整路径,比如:
[INFO] com.myapp:myproject:jar:1.0-SNAPSHOT [INFO] \- org.springframework.boot:spring-boot-starter-web:jar:3.2.5:compile [INFO] \- org.springframework:spring-web:jar:6.1.7:compile [INFO] \- org.apache.commons:commons-lang3:jar:3.11.0:compile
这条路径就是冲突的“源头之一”,帮助你判断是哪个上级依赖带进来的旧版本。
配合 -Ddebug 输出更详细的仲裁过程
如果想看 Maven 内部是怎么做版本选择的,加 -Ddebug 参数:
mvn dependency:tree -Dverbose -Ddebug
输出中会出现类似这样的日志:
[DEBUG] org.apache.commons:commons-lang3:jar:3.11.0:compile (selected) [DEBUG] \- org.apache.commons:commons-lang3:jar:3.12.0:compile (conflict with 3.11.0)
它明确告诉你哪个版本被选中、哪个被拒绝,以及拒绝原因(如“nearest wins”或“first declaration wins”),帮你验证是否符合预期。
导出依赖报告便于离线分析
把结果保存为文件,方便反复查阅或发给同事协作排查:
- 保存为文本:
mvn dependency:tree -Dverbose > deps-tree.txt - 生成 HTML 报告(需额外配置插件):
mvn dependency:tree -DoutputFile=target/deps.html -DoutputType=html
HTML 报告支持折叠/展开,对超大项目更友好;文本文件则适合用编辑器搜索关键词,比如搜 omitted 或具体版本号。

















