是否可以使用gradle生成取决于什么的树?
我有一个项目,想找出所有的依赖关系,这样我就可以使用前向声明等对其进行一些修剪。
gradle dependencies
应该管用。每个人都这么疯狂gradlew app:dependencies
可能是因为Android。
是否可以使用gradle生成取决于什么的树?
我有一个项目,想找出所有的依赖关系,这样我就可以使用前向声明等对其进行一些修剪。
gradle dependencies
应该管用。每个人都这么疯狂gradlew app:dependencies
可能是因为Android。
Answers:
对于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>
./gradlew
代替gradle
./gradlew :dependencies
会起作用。它将列出所有项目的依赖项,但是很容易找到合适的依赖项。
您可以使用命令呈现依赖关系树gradle dependencies
。有关更多信息,请参见在线用户指南中的11.6.4列出项目依赖项。
build.gradle
文件)中执行命令,或者您的构建文件未应用任何插件。
./gradlew dependencies
如果您发现难以导航的控制台输出gradle dependencies
,则可以添加“ 项目报告”插件:
apply plugin: 'project-report'
并使用以下命令生成HTML报告:
$ ./gradlew htmlDependencyReport
通常可以在以下位置找到报告 build/reports/project/dependencies/index.html
gradle htmlDependencyReport
在Android Studio中(至少从v2.3.3开始),您可以直接从UI运行命令:
单击Gradle选项卡,然后双击:yourmodule-> Tasks-> android-> androidDependencies
该树将显示在Gradle Console选项卡中
通常,complete test
,compile
和androidTestCompile
依赖图太多,无法一起检查。如果仅需要compile
依赖关系图,则可以使用:
./gradlew app:dependencies --configuration compile
注意:compile
在Gradle的最新版本中已不推荐使用,在更新的版本中,建议将所有compile
依赖项都移至implementation
。请在这里看到这个答案
如果要在图形中可视化依赖关系,可以使用gradle-dependency-graph-generator插件。
通常,此插件的输出可在build / reports / dependency-graph目录中找到,如果使用的是0.5.0版本,则它包含三个文件(.dot | .png | .svg)。
真实应用程序(Chess Clock)中的依赖关系图示例:
Gradle的情况已经向前发展,所以我相信这个问题值得另一个答案。
从Gradle 4.3开始,引入了“ 构建扫描 ”。所有相关信息是在摇篮文档(可1,2)。对我而言,这似乎是以一种清晰,有组织的方式检查依赖关系(通常是您的构建)的最简单方法。
它们非常易于创建,只需执行即可:
gradle build --scan
(或者./gradlew build --scan
如果您使用包装器)
这将产生一个随机生成的链接,您可以在其中查看扫描结果。打开该链接时,您输入电子邮件并完全控制该链接:例如。分享或删除它。它有很多有关构建的信息,而不仅仅是依赖关系。您可以看到您的依赖项,它们的层次结构,用于获取它们的存储库,以及有关构建的许多其他内容,即其性能(在大型复杂构建中很重要),测试,甚至控制台输出和系统配置,使用的是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本身促进了构建扫描,以此作为解决大多数构建问题的方法。
gradle build --scan
您通过 在Internet上的某个位置发布构建的详细信息-并删除它,您必须将其与正常工作的电子邮件地址相关联。
gradle build --scan
在cmd中执行 时,提示您: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
随机放置相同类型的链接)。因此,我相信它确实会在适当时候警告您。(1/2)
在Android Studio中
1)打开终端,并确保您位于项目的根文件夹中。
2)运行./gradlew app:dependencies
(如果不使用gradle包装器,请尝试 gradle app:dependencies
)
注意,运行./gradle dependencies
只会给您项目根目录的依赖树,因此以上述方式提及应用程序 ./gradlew app:dependencies
非常重要。
我还发现运行此命令很有用:
./gradlew dI --dependency <your library>
这显示了如何解决依赖关系(dependencyInsight
),并帮助您调试需要在哪里强制或排除库中的库build.gradle
请参阅:https://docs.gradle.org/current/userguide/tutorial_gradle_command_line.html
对我来说,这只是一个命令
在build.gradle中添加 plugin
apply plugin: 'project-report'
然后转到cmd并运行以下命令
./gradlew htmlDependencyReport
这给了我HTML报告WOW HTML报告💕
那就是我所有的主人。
对于Gradle的最新版本(我使用6.4.1版本进行了测试):
gradle dependencies --configuration compileClasspath
或者如果您正在使用Gradle Wrapper:
gradlew dependencies --configuration compileClasspath
如果要在两个步骤的最后将所有依赖项放在一个文件中。将此添加到您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图。