使用gradle查找依赖树

使用gradle查找依赖树,gradle,Gradle,有没有可能使用gradle生成一棵什么树取决于什么 我有一个项目,希望找出所有的依赖项,这样我就可以用前向声明等对其进行一些删减。您可以使用命令gradle dependencies呈现依赖项树。有关更多信息,请查看在线用户指南中的部分。不带模块: gradle dependencies 对于Android: gradle app:dependencies 使用渐变包装器: ./gradlew app:dependencies 注意:用项目模块名称替换app 此外,如果要检查某个对象是否

有没有可能使用gradle生成一棵什么树取决于什么


我有一个项目,希望找出所有的依赖项,这样我就可以用前向声明等对其进行一些删减。

您可以使用命令
gradle dependencies
呈现依赖项树。有关更多信息,请查看在线用户指南中的部分。

不带模块:

gradle dependencies
对于Android:

 gradle app:dependencies
使用渐变包装器:

./gradlew app:dependencies
注意:用项目模块名称替换
app

此外,如果要检查某个对象是否是
compile
vs.
testCompile
vs
androidTestCompile
依赖项,以及是什么将其拉入的:

./gradlew :app:dependencyInsight --configuration compile --dependency <name>
./gradlew :app:dependencyInsight --configuration testCompile --dependency <name>
./gradlew :app:dependencyInsight --configuration androidTestCompile --dependency <name>
/gradlew:app:dependencyInsight——配置编译——依赖
./gradlew:app:dependencyInsight——配置测试编译——依赖性
./gradlew:app:dependencyInsight——配置androidTestCompile——依赖关系

如果您发现很难导航
渐变依赖项的控制台输出,您可以添加:

并使用以下命令生成HTML报告:

$ ./gradlew htmlDependencyReport
报告通常可以在
build/reports/project/dependencies/index.html

看起来是这样的:

在Android Studio中

1) 打开终端并确保您位于项目的根文件夹中

2) 运行
/gradlew app:dependencies
(如果不使用gradle包装器,请尝试
gradle app:dependencies


请注意,运行
/gradle dependencies
只会给出项目根文件夹的依赖关系树,因此以上述方式提及应用程序,即
/gradlew app:dependencies
,非常重要。

通常完整的
测试实施
实施
,而
androidTestImplementation
依赖关系图太多,无法一起检查。如果您只需要
实现
依赖关系图,可以使用:

./gradlew app:dependencies --configuration implementation
资料来源:

注意:
compile
在较新版本的Gradle中已被弃用,在较新版本中,建议您将所有
compile
依赖项转移到
implementation
。请参见Android Studio中的

(至少从v2.3.3开始),您可以直接从UI运行命令:

单击Gradle选项卡,然后双击:yourmodule->Tasks->android->androidDependencies

该树将显示在渐变控制台选项卡中


我发现运行以下命令也很有用:

./gradlew dI --dependency <your library>
/gradlew dI——依赖关系
这显示了如何解析依赖项(
dependencyInsight
),并帮助您调试在
build.gradle


请参阅:

如果要在图形中可视化依赖项,可以使用插件

通常,此插件的输出可以在build/reports/dependency graph目录中找到,如果您使用的是0.5.0版本的插件,它包含三个文件(.dot |.png |.svg)

真实应用程序()中的依赖关系图示例:


请注意,如果模块在到达build.gradle之前有额外的目录,您可能需要执行类似于
/gradlew::dependencies
的操作。如果有疑问,请执行
/gradlew任务--
检查姓名。

Gradle的情况有所进展,因此我认为这个问题值得另一个答案。
自Gradle 4.3以来,引入了“构建扫描”。所有相关信息都可以在Gradle文档(,)中找到。对我来说,这似乎是以一种清晰、有组织的方式检查依赖项(通常是您的构建)的最简单方法

它们很容易创建,只需执行:

gradle build --scan  
(或
/gradlew build--如果使用包装器,则扫描

这将生成一个随机生成的链接,您可以在其中查看扫描。打开该链接时,您输入电子邮件并获得对该链接的完全控制权:例如,共享或删除该链接。它有很多关于构建的信息,而不仅仅是依赖项。您可以看到您的依赖项、它们的层次结构、用于获取它们的存储库,还可以看到关于构建的许多其他内容,即它的性能(对大型复杂构建很感兴趣)、测试、甚至控制台输出和系统配置(使用了JDK和JVM)、最大堆大小等

这是模拟项目的打印屏幕:

构建扫描是一个可共享的构建记录,它提供了对发生了什么以及为什么发生的洞察。您可以在scans.gradle.com免费创建构建扫描

但是请注意,构建过程的信息将发送到Gradle服务器。完成检查后,您可以完全控制删除它

最后,您也可以使用Gradle版本早于4.3的构建扫描,您只需在构建脚本中手动添加扫描插件

编辑
将评论中的一些反馈纳入一些额外的注释:
1) 这是很难做到这一点的错误或不理解,一些信息为您的建设将是在线的(私人给你,有能力删除它,但仍然在线)

执行
gradle build--scan
时,出现以下消息:

Publishing a build scan to scans.gradle.com requires accepting the Gradle
Terms of Service defined at https://gradle.com/terms-of-service. Do you
accept these terms? [yes, no]
您必须明确写入
yes
,然后消息继续:

Publishing build scan...  
https://gradle.com/s/a12en0dasdu
2) 在Gradle Enterprise中,您可以在自己的服务器中托管Gradle构建扫描。然而,我在这方面没有经验,我提出的方法是关于标准的Gradle发行版,使用Gradle的服务器进行构建扫描


3) Gradle本身将构建扫描作为处理大多数构建问题的方法

对于Android,请在终端中键入此选项

gradlew app:dependencies
它将列出所有依赖项和更新版本的依赖项,供您升级

com.android.support:customtabs:26.1.0 -> 27.1.1 (*)

如果希望所有依赖项在两个步骤中结束时都包含在一个文件中。 把这个加到你身上
com.android.support:customtabs:26.1.0 -> 27.1.1 (*)
project.rootProject.allprojects {
    apply(plugin="project-report")

    this.task("allDependencies", DependencyReportTask::class) {
        evaluationDependsOnChildren()
        this.setRenderer(AsciiDependencyReportRenderer())
    }

}
./gradlew allDependencies | grep '\-\-\-' | grep -Po '\w+.*$' | awk -F ' ' '{ print $1 }' | sort | grep -v '\{' | grep -v '\[' | uniq | grep '.\+:.\+:.\+'
apply plugin: 'project-report'
./gradlew htmlDependencyReport
gradle dependencies --configuration compileClasspath
gradlew dependencies --configuration compileClasspath