依赖分析 Gradle 插件(DAGP,née 依赖分析 Android Gradle 插件)检测以下内容:
未使用的依赖项。
使用传递依赖项(您可能想直接声明)。
在错误的配置上声明的依赖项( api
、 implementation
、 compileOnly
等)。
作为副作用,该插件还可以告诉您项目的 ABI,并生成表示依赖关系图的各种视图的 graphviz 文件等。这些副作用目前大多是未记录的内部行为,但某些高级用户可能会感兴趣。
除了与依赖性相关的建议(见上文)之外,DAGP 还提供其他建议来帮助您维持“构建健康”。这包括检测:
不必要的插件(目前只有kapt
)。
子项目(“模块”)不必要地使用 Android 插件,可以使用“普通”JVM 库代替。
请参阅 wiki,了解有关该插件兼容的 Gradle、Android Gradle 插件等版本的信息。
有关详细说明,请参阅 wiki。
最简单的方法是添加以下内容:
plugins {
id( " com.autonomousapps.build-health " ) version " <<latest_version>> "
}
重要的 | 如果您的项目使用 Kotlin 或 Android(或两者),那么这些插件还必须加载到设置脚本类加载器(或父类加载器)中。请参阅 wiki 了解更多信息 |
要快速启动,只需运行以下命令:
./gradlew buildHealth
您可能会看到如下输出:
> 任务:buildHealth 失败 失败:构建失败并出现异常。 * 出了什么问题: 任务“:buildHealth”执行失败。 > 存在依赖性违规。请参阅 file:///path/to/project/build/reports/dependency-analysis/build-health-report.txt 中的报告
如果您希望将此(可能很长)报告打印到控制台,请将其添加到您的gradle.properties
文件中:
dependency.analysis.print.build.health=true
您不必通过设置脚本将此插件应用到所有项目。它也可以仅应用于特定的子项目。在这种情况下,它还必须应用于根构建脚本。
plugins {
id( " com.autonomousapps.dependency-analysis " ) version " <<latest_version>> "
}
plugins {
id( " com.autonomousapps.dependency-analysis " )
}
重要的 | 如果您的项目使用 Kotlin 或 Android(或两者),那么这些插件还必须加载到根构建脚本类加载器(或父类加载器)中。请参阅 wiki 了解更多信息 |
可以使用projectHealth
任务针对各个模块运行分析。例如:
./gradlew 应用程序:projectHealth
插件报告项目依赖项声明的许多问题是很常见的。由于手动修复可能很乏味,因此该插件还提供了自动修复所有问题的任务。
./gradlew 修复依赖关系
在应用插件的每个项目上注册fixDependencies
任务。如上所述运行它将运行每个子项目中的任务。另请参阅一键依赖项修复。
在某些情况下,一次解决所有问题可能被认为是不可行的。也许您有一个非常大的项目,或者您发布了库,并且您知道更改依赖项声明也会更改库的元数据,这可能会破坏消费者。为了支持此用例, fixDependencies
任务采用一个可选标志来告诉它本质上只进行“安全”更改。
./gradlew 修复依赖项 --upgrade
使用此标志后, fixDependencies
任务将不会删除或“降级”任何依赖项声明。它只会添加或“升级”声明(例如,从implementation
到api
)。
在增量部署场景中,可以想象使用--upgrade
标志,然后更新所有使用者,最后删除该标志并删除所有未使用的依赖项。
如果分析有任何错误,那么修复依赖项声明会破坏您的构建(但手动修复也是如此)。如果您遇到此问题,请提出问题。
此外,重写功能基于简化的 Gradle Groovy/Kotlin DSL 语法,在存在复杂的构建脚本时会失败。我们计划很快增强 Gradle Kotlin DSL 语法,因为它是默认的构建脚本语言,但我们目前没有计划对 Gradle Groovy DSL 做同样的事情。
您可能会好奇为什么插件会发出(或不发出)有关某些依赖项的建议。你可以问它为什么:
./gradlew lib:reason --id com.squareup.okio:okio:2.2.2 (1) > 任务:lib:原因 ---------------------------------------------------- 您询问了依赖项“com.squareup.okio:okio:2.2.2”。 没有关于这种依赖性的建议。 ---------------------------------------------------- 从 :lib 到 com.squareup.okio:okio:2.2.2 的最短路径: :lib --- com.squareup.okio:okio:2.2.2 来源:主要 ------------ * 公开 okio.BufferedSource 类(隐含 api)。
版本字符串是可选的。
有关如何配置插件的详细信息,请参阅 wiki。
要配置插件,请使用dependencyAnalysis
扩展。
dependencyAnalysis {
// configuration goes here
}
以下是已发表的讨论此插件的文章/博客文章列表:
对 Gradle 构建进行适当的维护和喂养
依赖分析 Gradle 插件:使用字节码分析查找未使用的依赖项
依赖性分析 Gradle 插件:什么是 ABI?
减少 Gradle 插件对配置时间的影响:一段旅程
一键修复依赖关系
...还有更多内容:)
该插件也出现在这些时事通讯中:
格莱德,2024 年 10 月
格莱德,2022 年 5 月
格莱德,2020 年 9 月
格莱德,2020 年 8 月
Android 周刊,第 423 期
格莱德,2020 年 7 月
格莱德,2020 年 6 月
有关此插件的播客片段可以在这里找到:
开发商的面包店,第 31 集
关于此插件的 YouTube 视频:
了解 Gradle #28 – 使用依赖分析插件清理编译类路径