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