介绍组合构建

我们并不经常发布能彻底改变多个软件工程工作流程的功能,但今天就是这一天。组合构建 是 Gradle 3.1 中的一项新功能,它为项目组织开辟了一个全新的维度。

组合构建是一种将多个独立的 Gradle 构建合并在一起并一起构建的方法。这句话的简洁性并不能完全表达出所有新的可能性,所以让我向您展示这将如何让您作为开发人员的生活变得更加轻松。

加入项目

许多组织将他们的代码库拆分为多个独立的项目,每个项目都有一个专门的仓库和发布周期。项目之间的集成使用二进制依赖项进行管理,例如发布到 Artifactory 等二进制仓库的 JAR 文件。这种方法有很多优点,但在尝试快速开发和测试影响两个或多个项目的更改时,可能会效率低下。

想象一下,您正在修复应用程序依赖的 Java 库中的一个错误。您的工作流程可能类似于以下步骤:

  1. 更改库
  2. 将库发布到本地仓库
  3. 将本地仓库添加到应用程序的仓库中
  4. 将应用程序的依赖项更改为新的库版本
  5. 测试您的应用程序
  6. 重复此过程,直到问题解决或您崩溃

使用组合构建,您可以通过将库的构建包含到应用程序的构建中来简化此工作流程。然后,Gradle 会自动将对库的二进制依赖项替换为项目依赖项,这意味着您对库所做的更改会立即对应用程序生效。

同样的方法也适用于您的项目依赖的插件。您现在可以将本地签出的插件版本包含到项目的构建中,并在它们之间进行紧密的开发循环。

新的 includeBuild() API 在 settings.gradle 中,甚至允许您编写一个 Gradle 构建,如果它们在本地文件系统上可用,则动态包含其他构建。然后,您可以将此组合导入到您的 IDE 中,并进行跨仓库重构或调试。

拆分单体应用

想要避免多个仓库集成问题的组织倾向于使用“单体仓库”——一个包含所有项目的仓库,通常包括它们的依赖项和必要的工具。好处是所有代码都在一个地方,下游的故障会立即显现。但这种便利性可能会以生产力为代价:开发人员通常只处理单体仓库的一小部分,但仍然被迫构建所有上游项目,这可能意味着大量的等待和浪费时间。同样,将大型单体仓库项目导入 IDE 通常会导致响应缓慢且令人难以忍受的体验。

使用组合构建,您可以将单体仓库分解为同一仓库中的多个独立构建。开发人员可以使用单个构建来获得快速周转,或者在需要确保所有内容都能正常协作时使用整个组合。

如果您计划从单体应用程序迁移到多个独立应用程序,组合构建现在提供了一种无缝的迁移策略。

这仅仅是个开始

我们计划在即将发布的版本中为复合构建添加许多改进

  • 从命令行定位包含构建中的任务
  • 更丰富的依赖项替换 API,支持自定义发布
  • 并行执行包含的构建
  • 与 Gradle 的 持续构建 功能集成
  • 在 IntelliJ 和 Eclipse 中开箱即用地支持复合构建

当然,没有什么比来自现实世界使用的反馈更重要了。所以请在您自己的项目中试用复合构建,或者查看 示例。在 Gradle 论坛 上告诉我们您遇到的任何问题、建议以及您用它构建的酷炫事物。

讨论