我一直在探索 Gradle 的插件管理,并发现以下区别:
settings.gradle 中的块仅用于配置插件版本和解析策略。它实际上并不应用插件 - 它只是集中了插件的版本信息,这些插件稍后将通过settings.gradle 或构建脚本中的
pluginManagement { plugins { } }
顶级块应用。plugins { }
相比之下,顶级
plugins { }
块既解析插件,又将插件应用于项目。
我发现文档和讨论(Stack Overflow 参考)建议使用版本目录来集中定义插件版本,而不是依赖于pluginManagement { plugins { } }
块。
Kotlin 官方文档也建议使用版本目录。
我的问题是:
与使用 settings.gradle 中的块相比,使用版本目录进行插件版本管理的具体好处是什么pluginManagement { plugins { } }
?它纯粹是为了集中化和动态版本检索,还是有其他原因(例如构建性能、可维护性或清晰度)使其成为最佳实践?
此外,Gradle 源代码或文档中是否有任何官方参考或更深层次的技术解释可以澄清这种偏好?
版本目录
版本目录是一种以集中、类型安全的方式设置版本、库坐标和插件 ID 的集中方式,因为将它们放在那里会为所有项目中的值生成访问器。
您可以通过编写代码来创建类似的功能,或者通过编写您自己的插件来创建类似的功能,
buildSrc
这些插件已应用于相关的构建中。但是版本目录使用标准 API 来实现这一点,这自然比每个项目都实现自己的版本目录风格更有优势(我记得我为此付出的努力!)。在设置文件中使用约束
在设置文件中修复插件(可能还有库)版本存在几个问题:
它根本就没有实现版本目录的所有好处。
它起源于maven时代。当单个根项目具有和/或时,
dependencies
可以plugins
不带和其他属性来编写和。只有内部需要,并且那些依赖项实际上不起作用,仅用作模板。version
dependencyManagement
pluginManagement
dependencies
dependencyManagement
version
同时,在 maven 中还有另一种定义
version
名称常量的做法。这是由于相关的库 jar 通常具有相同的版本。我是个老派人士,喜欢使用 maven 和 ~Management。在
version
字段中,我可以按 Ctrl+Space 来获取当前可用版本(可能为较新版本)的列表。但人们可以理解,使用版本目录只需一种干净的方法。并轻松处理具有相同版本号的兄弟库。