mvn dependency:tree 是 Maven 的一个常用命令,用于显示项目的依赖树。通过这个命令输出的结果,你可以清晰地看到你的项目依赖了哪些库,以及这些库的传递依赖关系。下面详细讲解如何读懂这个输出结果。
1. 基本结构
假设你运行:
mvn dependency:tree
输出示例:
[INFO] com.example:my-app:jar:1.0-SNAPSHOT
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.7.0:compile
[INFO] | +- org.springframework.boot:spring-boot-starter:jar:2.7.0:compile
[INFO] | | +- org.springframework.boot:spring-boot:jar:2.7.0:compile
[INFO] | | +- org.springframework:spring-core:jar:5.3.20:compile
[INFO] | | \- org.springframework:spring-context:jar:5.3.20:compile
[INFO] | +- org.springframework.boot:spring-boot-starter-json:jar:2.7.0:compile
[INFO] | | +- com.fasterxml.jackson.core:jackson-databind:jar:2.13.3:compile
[INFO] | | +- ...(省略)
[INFO] +- junit:junit:jar:4.13.2:test
2. 各部分含义
每一行的格式通常为:
[INFO] <groupId>:<artifactId>:<packaging>:<version>:<scope>
- groupId:组织名称
- artifactId:模块名称
- packaging:打包方式(如 jar、war)
- version:版本号
- scope:依赖范围(如 compile、test)
3. 层级关系
- 第一行是你的项目本身。
- 后面的每一行按缩进和符号
+-或|或\–表示依赖的层级。 +-表示直接依赖。|表示上一层依赖的子依赖(继续向下)。\-表示某一分支的结束。
4. 传递依赖
比如你的项目依赖了 spring-boot-starter-web,它又依赖了 spring-boot-starter、spring-boot、spring-core 等。通过树状结构你可以看到这些传递依赖。
5. 冲突与排除
有时会看到类似这样的输出:
[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.13.3:compile
[INFO] | \- (com.fasterxml.jackson.core:jackson-annotations:jar:2.13.3:compile - omitted for conflict with 2.12.0)
说明有依赖冲突,Maven 选择了某个版本,另一个被省略。
6. 典型用途
- 排查依赖冲突:找出某个库为什么被引入,是否有版本冲突。
- 优化依赖:移除不必要的依赖,避免包冗余。
- 理解依赖关系:全面了解项目依赖链。
7. 高级用法
可以加参数输出更详细信息:
mvn dependency:tree -Dverbose
或者输出为不同格式:
mvn dependency:tree -DoutputType=dot
总结:
mvn dependency:tree 的输出就是你的项目依赖的完整树状图,逐层展开所有直接和间接依赖。读懂每一行的含义和结构,有助于你排查和管理项目依赖。
1150

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



