复合构建 (Composite Builds)
源:使用复合构建
在以前,我们习惯把自定义 Task 和插件放在 buildSrc 目录下。但 buildSrc 有一个致命缺点:一旦 buildSrc 里的代码发生微小变动,全项目的所有模块构建缓存都会失效。
复合构建 (Composite Builds) 允许你将一个独立的 Gradle 项目作为“包含构建”引入,它能完美解决上述问题。
1. 核心用法:includeBuild
在主项目的 settings.gradle.kts 中:
kotlin
rootProject.name = "MyMainApp"
// 将外部项目引入,作为构建逻辑的一部分
includeBuild("my-gradle-plugins")2. 场景对比
| 特性 | buildSrc | 复合构建 (Composite Builds) |
|---|---|---|
| 生效范围 | 当前项目 | 可被多个项目共享 |
| 缓存敏感度 | 极高 (牵一发动全身) | 低 (仅在需要时重新编译) |
| IDE 支持 | 良好 | 极佳 (可独立打开,独立调试) |
| 复杂性 | 简单 | 中等 |
3. 为什么选择复合构建?
当你开发跨项目通用的 Gradle 插件时,复合构建允许你像引用本地模块一样引用插件源码。你可以直接在主项目中修改插件代码并立即运行,Gradle 会自动处理插件项目的预编译。
4. 最佳实践
目前的顶级开源项目(如 Android 官方的 nowinandroid)全部采用了 “复合构建 + 约定插件” 的组合模式。这是目前 Android 构建系统的“版本答案”。