是否有可能使用Gradle生成一个什么依赖什么的树?

我有一个项目,想要找出所有的依赖,所以我可以用前向声明等修剪它一点。


你可以使用gradle dependencies命令来呈现依赖树。有关更多信息,请查看在线用户指南中列出项目中的依赖项一节。


没有模块:

gradle dependencies

为Android:

 gradle app:dependencies

使用gradle包装:

./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>

如果你发现很难导航控制台输出的gradle依赖项,你可以添加项目报告插件:

apply plugin: 'project-report'

并生成一个HTML报告使用:

$ ./gradlew htmlDependencyReport

Report通常可以在build/reports/project/dependencies/index.html中找到

它是这样的:


在Android Studio中

1)打开终端,确保你在项目的根文件夹。

2)运行。/gradlew app:dependencies(如果没有使用gradle wrapper,尝试gradle app:dependencies)

注意,运行。/gradle dependencies只会给你项目根文件夹的依赖树,所以以上述方式提到app,即./gradlew app:dependencies是很重要的。


通常完整的testimplemimplementation、实现和androidtestimplemimplementation依赖关系图太多了,不能一起检查。如果你只是想要实现依赖关系图,你可以使用:

./gradlew app:dependencies --configuration implementation

来源:列出项目中的依赖项

注意:compile在最近的Gradle版本中已经被弃用,在最近的版本中,建议你将所有的compile依赖项转移到实现中。请看这里的答案


在Android Studio中(至少从v2.3.3开始),你可以直接从UI运行命令:

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

该树将显示在Gradle Console选项卡中


我还发现运行这个很有用:

./gradlew dI --dependency <your library>

这显示了如何解析依赖关系(dependencyInsight),并帮助你调试到需要在build.gradle中强制或排除库的位置

参见:https://docs.gradle.org/current/userguide/tutorial_gradle_command_line.html


如果你想在图形中可视化你的依赖关系,你可以使用gradle-dependency-graph-generator插件。

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

真实应用(象棋时钟)中的依赖关系图示例:


注意,如果模块在到达build.gradle之前有额外的目录,您可能需要执行类似于./gradlew <module_directory>:<module_name>:dependencies的操作。如果有疑问,执行./gradlew任务——所有这些都是为了检查名称。


在Gradle中,事情已经向前发展了,所以我相信这个问题值得另一个答案。 从Gradle 4.3开始,就引入了“构建扫描”。所有相关信息都可以在Gradle文档(1,2)中找到。对我来说,这似乎是现在最简单的方法,以一种清晰、有组织的方式检查你的依赖关系(通常是你的构建)。

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

gradle build --scan  

(或。/gradlew build -scan如果你使用包装)

This produces a randomly generated link where you can see your scan. When opening that link, you enter your email and gain full control of the link: eg. share it or delete it. It has got a lot of info about your build, not just dependencies. You can see your dependencies, their hierarchies, the repository used to obtain them but also a lot of other stuff about your build, namely, its performance (which is of interest in big complex builds), your tests, even your console output and your system configuration, which JDK and JVM was used, max heap size etc.

这是一个模拟项目的截屏:

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

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

最后,你也可以在4.3之前的Gradle版本中使用构建扫描,你只需要手动在你的构建脚本中添加扫描插件。

编辑: 结合一些来自评论的反馈,一些额外的注释: 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企业版中,你可以在自己的服务器上运行Gradle构建扫描。然而,我在这方面没有经验,我建议的方法是关于标准的Gradle发行版,使用Gradle的服务器进行构建扫描。

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


对于Android,在终端中输入这个

gradlew app:dependencies

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

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

如果您希望在最后的两个步骤内将所有依赖项放在一个文件中。 把这个添加到你的build.gradle.kts项目的根目录中:

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 '.\+:.\+:.\+'

这将为您提供项目和子项目中的所有依赖项以及所有第三方依赖项。

如果您希望以编程的方式完成此工作,那么您将需要一个自定义的依赖关系渲染器——您可以从扩展AsciiDependencyReportRenderer开始,它默认情况下打印依赖关系的ascii图。


对于最新版本的Gradle(我使用6.4.1版本进行测试):

gradle dependencies --configuration compileClasspath

或者如果你正在使用Gradle Wrapper:

gradlew dependencies --configuration compileClasspath

当使用'debug'和'release'编译配置文件为Android构建时,可以使用debugCompileClasspath和releaseCompileClasspath配置来代替compileClasspath。


双击并在gradle视图的帮助下运行依赖项


试试这两种方法

./gradlew dependencies > ~/dependencies.txt

or

gradle dependencies > ~/dependencies.txt`

这应该写在用户的主目录下的文本文件依赖。