Skip to content

查看依赖树

分析依赖树是排查依赖冲突和理解传递依赖的重要手段。

基本命令

bash
# 查看所有配置的依赖树
./gradlew dependencies

# 查看特定配置(推荐,输出更精简)
./gradlew dependencies --configuration compileClasspath
./gradlew dependencies --configuration runtimeClasspath
./gradlew dependencies --configuration testCompileClasspath

# 多项目:查看子项目的依赖
./gradlew :core:dependencies --configuration compileClasspath

输出解读

compileClasspath - Compile classpath for source set 'main'.
+--- org.springframework.boot:spring-boot-starter-web:3.2.0
|    +--- org.springframework.boot:spring-boot-starter:3.2.0
|    |    +--- org.springframework.boot:spring-boot:3.2.0
|    |    |    +--- org.springframework:spring-core:6.1.1
|    |    |    \--- org.springframework:spring-context:6.1.1
|    |    \--- org.springframework.boot:spring-boot-autoconfigure:3.2.0
|    +--- org.springframework.boot:spring-boot-starter-json:3.2.0
|    |    \--- com.fasterxml.jackson.core:jackson-databind:2.15.3 (*)
|    \--- ...
\--- com.google.guava:guava:30.0 -> 32.0.1-jre
     \--- ...

(*) - dependencies omitted (listed previously)
(c) - dependency constraint
符号含义
+---非最后一个子依赖
\---最后一个子依赖
(*)重复依赖(已在上方列出)
-> X.Y.Z版本被升级到 X.Y.Z(冲突解决)
(c)版本约束
(n)不参与解析的依赖

dependencyInsight - 追踪单个依赖

bash
# 查看 spring-core 被谁引入、版本如何决定
./gradlew dependencyInsight --dependency spring-core

# 指定配置
./gradlew dependencyInsight --dependency guava --configuration compileClasspath

输出示例:

> Task :dependencyInsight
com.google.guava:guava:32.0.1-jre (selected by rule)
   Variant compileClasspath:
   ...

com.google.guava:guava:30.0 -> 32.0.1-jre
\--- com.example:A:1.0
     \--- compileClasspath

com.google.guava:guava:32.0.1-jre
\--- com.example:B:2.0
     \--- compileClasspath

这告诉你:A 要求 30.0B 要求 32.0.1,Gradle 选择了 32.0.1(高版本优先)。

HTML 依赖报告

bash
# 生成 HTML 格式的依赖报告
./gradlew htmlDependencyReport

# 报告位于:build/reports/project/dependencies/

Build Scan 依赖分析

bash
# 生成构建扫描,提供可视化的依赖分析
./gradlew build --scan

访问生成的 URL,可以在浏览器中交互式查看依赖树。

下一步