介绍复合构建
引言
我们并非每天都能宣布一项能革新多个软件工程工作流程的功能,但今天就是这样的一天。复合构建,Gradle 3.1 中的一项新功能,为项目组织带来了全新的维度。
复合构建是一种将多个独立 Gradle 构建组合并一起构建它们的方式。这个陈述的简洁性并不能完全传达所有新的可能性,所以让我向您展示这将如何让您作为开发者的生活变得更加轻松。
加入项目 #
许多组织将其代码库拆分成多个独立的项目,每个项目都有一个专用的存储库和发布周期。项目之间的集成通过二进制依赖项进行管理,例如发布到 Artifactory 等二进制存储库的 JAR 文件。这种方法有很多优点,但在一次快速开发和测试影响两个或多个项目的更改时可能效率低下。
想象一下,您正在修复您的应用程序依赖的一个 Java 库中的一个 bug。您的工作流程可能如下所示:
- 更改库
- 将库发布到本地存储库
- 将本地存储库添加到应用程序的存储库中
- 将应用程序的依赖项更改为新的库版本
- 测试您的应用程序
- 重复此过程,直到问题解决或您精神崩溃
通过复合构建,您可以通过将库的构建包含到应用程序的构建中来缩短此工作流程。Gradle 将自动把对库的二进制依赖项替换为项目依赖项——这意味着您对库所做的更改将即时提供给应用程序
同样的方法也适用于您的项目依赖的插件。您现在可以将本地签出的插件版本包含到项目的构建中,并在此之间建立相同的紧密开发循环
settings.gradle 中的新 includeBuild()
API 甚至允许您编写一个 Gradle 构建,该构建会在其他构建可用于本地文件系统时动态包含它们。然后,您可以将此复合构建导入到您的 IDE 中,并进行跨存储库重构或调试。
拆分单体 #
为避免多个存储库集成痛点的组织倾向于使用“monorepo”——一个包含所有项目的存储库,通常包括其依赖项和必要的工具。好处是所有代码都在一个地方,并且下游中断会立即可见。但是,这种便利性可能会以牺牲生产力为代价:给定的开发人员通常只处理 monorepo 的一小部分,但仍被迫构建所有上游项目,这可能意味着大量等待和浪费时间。同样,将大型 monorepo 项目导入 IDE 通常会导致响应迟缓和体验不堪重负。
通过复合构建,您可以将 monorepo 拆分成同一存储库中的多个独立构建。开发人员可以处理单个构建以获得快速的周转时间,或者在他们想确保一切都能良好协作时处理整个复合构建
如果您正计划从单体应用程序迁移到多个独立应用程序,复合构建现在提供了一种无缝的迁移策略。
这只是个开始 #
我们计划在即将发布的版本中为复合构建添加一些改进
- 从命令行定位包含构建中的任务
- 支持自定义发布的更丰富的依赖项替换 API
- 并行执行包含的构建
- 与 Gradle 的连续构建功能集成
- IntelliJ 和 Eclipse 对复合构建的开箱即用支持
当然,没有什么比真实世界使用反馈更重要的了。因此,请在您自己的项目中试用复合构建,或查看示例。在Gradle 论坛上告知我们您遇到的任何问题、建议以及使用它构建的酷炫内容。