是否可以使用Gradle生成依赖关系树?
我有一个项目,并希望找出所有的依赖关系,以便可以通过前向声明等方式来对其进行修剪。
是否可以使用Gradle生成依赖关系树?
我有一个项目,并希望找出所有的依赖关系,以便可以通过前向声明等方式来对其进行修剪。
没有模块:
gradle dependencies
对于Android:
gradle app:dependencies
使用Gradle包装器:
./gradlew app:dependencies
注意: 将app
替换为项目模块名称。
此外,如果您想检查某个依赖项是compile
还是testCompile
还是androidTestCompile
,以及是谁拉取了它:
./gradlew :app:dependencyInsight --configuration compile --dependency <name>
./gradlew :app:dependencyInsight --configuration testCompile --dependency <name>
./gradlew :app:dependencyInsight --configuration androidTestCompile --dependency <name>
./gradlew -q dependencies :dependencies
,它会搜索你所有的文件夹。 :P - Alberto Maluje./gradlew :dependencies
即可。它会列出所有项目的依赖项,但很容易找到正确的那个。 - dirkjot./gradlew dependencies
是可以的(而 ./gradlew app:dependencies
则会给出以下错误 / 异常信息:“在根项目 'spring-petclinic' 中未找到项目 'app'。”)。 - Maritgradle dependencies
来呈现依赖树。如需更多信息,请参阅在线用户指南中的列出项目依赖项部分。build.gradle
文件),或者你的构建文件未应用任何插件。 - Benjamin Muschko./gradlew dependencies
- ScrappyDev如果您发现难以浏览gradle dependencies
的控制台输出,您可以添加项目报告插件:
apply plugin: 'project-report'
对于多模块项目(大多数项目),您需要配置报告以包括子项目:
htmlDependencyReport {
projects = project.allprojects
}
使用以下命令生成HTML报告:
$ ./gradlew htmlDependencyReport
报告通常可以在 build/reports/project/dependencies/index.html
中找到。
gradle htmlDependencyReport
命令。 - Richard Tinglegradle dependencyReport
。 - tequilacat:dependencies
代替app:dependencies
。 - Janos Vincellerhtml
文件将会在 build/reports/project/dependencies/root.html
中找到。 - Binita Bharatigradlew dependencyReport
这个命令非常好用,可以给你提供完整的依赖树。 - Dupinder Singh无法调用“com.kitfox.svg.SVGDiagram.setIgnoringClipHeuristic(boolean)”,因为“diagram”为空。- Andres Camilo Sierra Hormiga
Gradle已经有了新进展,因此我认为这个问题值得另一个答案。
自Gradle 4.3以来,引入了“构建扫描”。所有相关信息都在Gradle文档中(1,2)。对我来说,这似乎是现在最简单的以清晰、有组织的方式检查依赖项(以及通常的构建)的方法。
创建它们非常容易,只需执行:
gradle build --scan
(或者使用包装器的./gradlew build --scan
)
这将生成一个随机生成的链接,您可以在该链接中查看扫描结果。打开链接后,输入您的电子邮件即可完全控制该链接:例如分享或删除它。它包含关于您的构建的大量信息,不仅仅是依赖项。您可以查看依赖项、它们的层次结构、获取它们所使用的存储库,还可以了解有关构建的许多其他信息,例如其性能(对于复杂的大型构建非常有用)、您的测试甚至是您的控制台输出和系统配置、使用的JDK和JVM、最大堆大小等。
以下是来自模拟项目的截图:
构建扫描是构建的可共享记录,提供了发生了什么以及为什么的见解。您可以免费在 scans.gradle.com 创建构建扫描。
但是请注意,会向Gradle服务器发送有关您的构建过程的信息。完成检查后,您可以完全控制并将其删除。
最后,您也可以在早于4.3的Gradle版本中使用构建扫描,只需在buildscript中手动添加扫描插件即可。
编辑:
根据评论中的一些反馈,增加了一些额外的说明:
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
时,会弹出一个提示:“将构建扫描发布到scans.gradle.com需要接受Gradle服务条款,该服务条款在 https://gradle.com/terms-of-service 中定义。您接受这些条款吗?[yes, no]”,你需要手动输入“yes”。之后你会收到一条消息:Publishing build scan... https://gradle.com/s/a12en0dasdu
(随机链接)。所以我认为它确实在适当的时候提醒了你。(1/2) - tryman对于Android设备,请在终端中输入以下命令:
gradlew app:dependencies
它将列出所有的依赖项,以及需要升级的新版本
com.android.support:customtabs:26.1.0 -> 27.1.1 (*)
对于最近版本的Gradle(我测试了6.4.1版本):
gradle dependencies --configuration compileClasspath
如果您正在使用Gradle Wrapper:
gradlew dependencies --configuration compileClasspath
debugCompileClasspath
和 releaseCompileClasspath
配置替代 compileClasspath
。