mvn dependency:tree
一、命令核心作用
-
依赖可视化
以树形结构展示项目的依赖关系,包括:- 直接依赖:
pom.xml
中显式声明的依赖 - 传递依赖:被直接依赖所引入的间接依赖
- 直接依赖:
-
冲突排查
快速定位依赖版本冲突(同一个库出现多个版本时显示路径)。 -
依赖溯源
跟踪传递依赖的来源(例如:依赖 A 引入了 B)。
二、基础用法
mvn dependency:tree
输出示例:
[INFO] com.example:demo:jar:1.0
[INFO] +- org.springframework:spring-core:jar:5.3.10:compile
[INFO] | \- commons-logging:commons-logging:jar:1.2:compile
[INFO] \- junit:junit:jar:4.13.2:test
[INFO] \- org.hamcrest:hamcrest-core:jar:1.3:test
三、进阶参数详解
参数 | 作用 | 示例 |
---|---|---|
-Dverbose | 显示更详细信息(包括冲突忽略的依赖) | mvn dependency:tree -Dverbose |
-Dincludes=<依赖过滤器> | 按 groupId /artifactId 过滤输出 | mvn dependency:tree -Dincludes=org.apache.logging:* |
-Dexcludes=<排除依赖> | 排除特定依赖 | mvn dependency:tree -Dexcludes=log4j:log4j |
-Dscope=<作用域> | 按作用域过滤(如 test /compile ) | mvn dependency:tree -Dscope=test |
-DoutputFile=<文件路径> | 输出到文件 | mvn dependency:tree -DoutputFile=dependencies.txt |
-DoutputType=dot | 生成 Graphviz 可渲染的 DOT 格式 | mvn dependency:tree -DoutputType=dot > deps.dot |
四、过滤依赖实操
-
包含指定依赖
只输出log4j
相关依赖:mvn dependency:tree -Dincludes=log4j:log4j
-
排除依赖
过滤掉slf4j
:mvn dependency:tree -Dexcludes=org.slf4j:*
-
组合过滤
仅检查com.google.guava
的test
作用域依赖:mvn dependency:tree -Dincludes=com.google.guava:* -Dscope=test
五、解决依赖冲突
-
查看冲突版本
使用-Dverbose
参数显示被忽略的版本:mvn dependency:tree -Dverbose
输出示例:
[INFO] \- org.slf4j:slf4j-log4j12:jar:1.7.30:compile [INFO] +- log4j:log4j:jar:1.2.17:compile [INFO] \- org.slf4j:slf4j-api:jar:1.7.30:compile (版本冲突: 忽略 1.7.25)
-
分析冲突路径
从树中定位哪个依赖引入了冲突版本,在pom.xml
中通过<exclusions>
解决:<dependency> <groupId>org.example</groupId> <artifactId>problematic-lib</artifactId> <exclusions> <exclusion> <groupId>conflict-group</groupId> <artifactId>conflict-artifact</artifactId> </exclusion> </exclusions> </dependency>
六、注意事项
-
依赖解析阶段
命令会触发 Maven 的依赖解析流程(无需重新编译代码)。 -
多模块项目
在根目录执行时默认显示所有子模块依赖树。若需单模块:mvn -pl <模块名> dependency:tree
-
图形化工具
输出为 DOT 格式后可生成可视化图:mvn dependency:tree -DoutputType=dot > deps.dot dot -Tpng deps.dot -o deps.png # 需安装 Graphviz
七、典型应用场景
- 排查
ClassNotFoundException
或NoSuchMethodError
(依赖冲突) - 验证新引入的依赖是否生效
- 精简项目依赖(移除无用传递依赖)
掌握此命令能极大提升 Maven 项目依赖问题的解决效率!