是否有可能使用Gradle来产生一棵树,这取决于什么?
我有一个项目,想找出所有的依赖关系,这样我就可以用前向声明等来修剪它。
您可以使用命令gradle dependencies呈现依赖关系树。有关更多信息,请查看在线用户指南中的列出项目中的依赖项部分。
gradle dependencies
没有模块:
对于Android:
gradle app:dependencies
使用gradle包装器:
./gradlew app:dependencies
备注:将app替换为项目模块名称。
app
此外,如果你想检查某个东西是否是compile vs.testCompile vsandroidTestCompile依赖项,以及是什么吸引了它:
compile
testCompile
androidTestCompile
./gradlew :app:dependencyInsight --configuration compile --dependency <name> ./gradlew :app:dependencyInsight --configuration testCompile --dependency <name> ./gradlew :app:dependencyInsight --configuration androidTestCompile --dependency <name>
如果您发现难以导航gradle dependencies的控制台输出,您可以添加项目报告插件:
apply plugin: 'project-report'
并使用以下方法生成超文本标记语言报告:
$ ./gradlew htmlDependencyReport
报告通常可以在build/reports/project/dependencies/index.html中找到
build/reports/project/dependencies/index.html
它看起来像这样:
在Android Studio
1)打开终端并确保您位于项目的根文件夹中。
2)运行./gradlew app:dependencies(如果不使用gradle包装器,请尝试gradle app:dependencies)
请注意,运行./gradle dependencies只会给你项目根文件夹的依赖关系树,因此以上述方式提及应用程序,即./gradlew app:dependencies很重要。
./gradle dependencies
通常,完整的testImplementation、implementation和androidTestImplementation依赖图无法一起检查。如果您只想要implementation依赖图,您可以使用:
testImplementation
implementation
androidTestImplementation
./gradlew app:dependencies --configuration implementation
图片来源:列出项目中的依赖项
注意:compile在Gradle的最新版本中已被弃用,并且在最新版本中,建议您将所有compile依赖项转移到implementation。请参阅这个答案在这里
在Android Studio中(至少从v2.3.3开始),您可以直接从UI运行命令:
单击Gradle选项卡,然后双击组件定义:你的模块->任务->Android依赖
该树将显示在Gradle控制台选项卡中
我还发现运行这个很有用:
./gradlew dI --dependency <your library>
这显示了如何解决依赖关系(dependencyInsight),并帮助您调试到build.gradle中需要强制或排除库的位置
dependencyInsight
build.gradle
请参阅:https://docs.gradle.org/current/userguide/tutorial_gradle_command_line.html
如果你想在图形中可视化你的依赖关系,你可以使用g radle-依赖-图-生成器插件。
通常,这个插件的输出可以在构建/报告/依赖-图目录中找到,如果您使用的是0.5.0版本的插件,它包含三个文件(. dot|. png|. svg)。
真实应用程序中的依赖关系图示例(象棋时钟):
请注意,如果模块在到达其build.gradle.之前有额外的目录,您可能需要执行./gradlew <module_directory>:<module_name>:dependencies之类的操作。
./gradlew <module_directory>:<module_name>:dependencies
Gradle的事情已经向前发展,所以我相信这个问题值得另一个答案。 从Gradle 4.3开始,引入了“构建扫描”。所有相关信息都可以在Gradle文档(1,2)中找到。对我来说,这似乎是现在以清晰,有条理的方式检查你的依赖项(以及通常你的构建)的最简单方法。
它们很容易创建,只需执行:
gradle build --scan
(或./gradlew build --scan,如果您使用包装器)
./gradlew build --scan
这会生成一个随机生成的链接,您可以在其中看到您的扫描。打开该链接时,您输入您的电子邮件并完全控制该链接:例如。共享或删除它。它有很多关于你构建的信息,而不仅仅是依赖项。您可以看到您的依赖项、它们的层次结构、用于获取它们的存储库,还可以看到有关构建的许多其他内容,即它的性能(在大型复杂构建中感兴趣)、您的测试,甚至您的控制台输出和您的系统配置、使用了哪个JDK和JVM、最大堆大小等。
这是一个模拟项目的打印屏幕:
构建扫描是构建的可共享记录,它提供了对发生的事情和原因的深入了解。您可以在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,然后消息继续:
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 (*)
如果您希望在两步内将所有依赖项放在单个文件的末尾。 将其添加到项目根目录中的build.gradle.kts中:
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图。
AsciiDependencyReportRenderer
对我来说,这只是一个命令
在build.gradle中添加plugin
plugin
然后转到cmd并运行以下命令
./gradlew htmlDependencyReport
这给了我一个超文本标记语言报告WOW Html报告💕
或者,如果您想在text file中使用报告,请使用以下命令轻松搜索
text file
gradlew dependencyReport
这是所有我的主。
对于最新版本的Gradle(我使用6.4.1版本进行了测试):
gradle dependencies --configuration compileClasspath
或者如果您使用Gradle Wrapper:
gradlew dependencies --configuration compileClasspath
使用“调试”和“发布”编译配置文件为Android构建时,可以使用debugCompileClasspath和releaseCompileClasspath配置而不是compileClasspath。
debugCompileClasspath
releaseCompileClasspath
compileClasspath
双击并在gradle视图的帮助下运行依赖项
试试这个吧
./gradlew dependencies > ~/dependencies.txt
或
gradle dependencies > ~/dependencies.txt`
它应该将依赖项写入用户主目录下的文本文件中。