在Gradle中如何显示和分析buildscript依赖项(例如插件)的简单方法
介绍
这是我的Gradle技巧迷你系列的第三部分,该系列与可视化和依赖性分析有关。 在第一篇文章中,我介绍了一种如何显示多项目构建中所有子项目的依赖关系的方法。 在第二篇文章中,我展示了一种可用于跟踪项目中未预期的传递依赖项的技术。 这次较少使用的东西,但是在特定情况下至关重要–构建脚本依赖项。
实际用例
Buildscript依赖项包含我们项目中使用的插件及其依赖项。 除非您是Gradle插件开发人员,否则这似乎没什么意思,但这并不是完全正确的。 曾经,作为一名顾问,我正在一个大型项目中研究与NoSuchMethodException
有关的问题,该项目具有在Gradle之上构建的自定义构建框架。 仅当一个无辜的,非常流行的开源插件已添加到该项目中时,才发生该问题。 同一插件在该公司的许多其他项目中都可以正常工作。 最后,我能够找出buildSrc
自定义脚本中使用的依赖项之一,从插件覆盖旧版本中的相同依赖项。 结果,插件在运行时失败,并提到了NoSuchMethodException
。 为了实现这一点,我不得不使用自定义脚本,因为在使用./gradlew dependencies
或./gradlew dependencyInsight
时,完全忽略了buildscript / classpath依赖项。
解
写这篇文章的想法是在2015年初提出的。我想展示我的Gradle小型任务,该任务使用一些内部Gradle机制检索buildscript依赖项并将其显示在控制台上。 该帖子被推迟了,将近一年后,我对Gradle 2.10的发行说明感到惊讶。 添加了新的buildEnvironment
任务。
$ ./gradlew buildEnvironment
:buildEnvironment------------------------------------------------------------
Root project
------------------------------------------------------------classpath
+--- com.bmuschko:gradle-nexus-plugin:2.3
\--- io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.5.3\--- org.codehaus.groovy.modules.http-builder:http-builder:0.7.1+--- org.apache.httpcomponents:httpclient:4.2.1| +--- org.apache.httpcomponents:httpcore:4.2.1| +--- commons-logging:commons-logging:1.1.1| \--- commons-codec:commons-codec:1.6+--- net.sf.json-lib:json-lib:2.3| +--- commons-beanutils:commons-beanutils:1.8.0| | \--- commons-logging:commons-logging:1.1.1| +--- commons-collections:commons-collections:3.2.1| +--- commons-lang:commons-lang:2.4| +--- commons-logging:commons-logging:1.1.1| \--- net.sf.ezmorph:ezmorph:1.0.6| \--- commons-lang:commons-lang:2.3 -> 2.4+--- net.sourceforge.nekohtml:nekohtml:1.9.16\--- xml-resolver:xml-resolver:1.2(*) - dependencies omitted (listed previously)BUILD SUCCESSFULTotal time: 1.38 secs
两个插件和传递的依赖关系到包gradle这个-关系分期-插件由于HTTP建设者(也许这将是很好的,取而代之的是Jodd ?)。
摘要
能够区分标准项目依赖关系和buildscript依赖关系是值得的。 新的buildEnvironment
任务有助于处理后者。 当奇怪的运行时错误开始出现时,这又变得至关重要。
经过Gradle 2.10测试。
翻译自: https://www.javacodegeeks.com/2016/06/gradle-tricks-display-buildscript-dependencies.html