复合构建亮点介绍

431 阅读4分钟

我们不是每天都能宣布一个彻底改变若干软件工程工作流程的功能,但今天就是这样。*复合构建*是Gradle 3.1中的一个新功能,它在项目组织中实现了一个全新的层面。

复合构建是一种连接多个独立的Gradle构建并将其构建在一起的方法。这句话的简洁并没有完全表达出所有的新的可能性,所以让我来告诉你,这将使你的开发变得更加容易。

加入项目

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

想象一下,你正在修复一个你的应用程序所依赖的Java库中的一个错误。你的工作流程可能看起来像下面这样:

  1. 改变库的内容
  2. 将该库发布到本地仓库
  3. 将本地仓库添加到你的应用程序的仓库中
  4. 将你的应用程序的依赖关系改为新库的版本
  5. 测试你的应用程序
  6. 重复上述步骤,直到问题得到解决或你失去理智为止。

在复合构建中,你可以通过将库的构建纳入你的应用程序的构建来缩短这个工作流程。然后Gradle会自动将库的二进制依赖性替换为项目依赖性--这意味着你对库所做的修改会立即对应用程序可用。

同样的方法也适用于你的项目所依赖的插件。你现在可以将一个本地签出的插件版本纳入你的项目构建中,并进入它们之间同样紧密的开发循环。

includeBuild() settings.gradle 中新的API甚至可以让你写一个Gradle构建,如果其他构建在本地文件系统中可用的话,就动态地包括这些构建。然后,你可以把这个组合导入你的IDE,进行跨库重构或调试。

分割单体

那些想避免多个版本库的集成痛苦的组织倾向于使用 "单库"——一个包含所有项目的版本库,通常包括它们的依赖和必要的工具。这样做的好处是,所有的代码都在一个地方,下游的断点可以立即看到。但这种便利可能是以生产力为代价的:一个特定的开发者通常只在单库的一小部分工作,但仍将被迫构建所有的上游项目,这可能意味着大量的等待和时间浪费。同样,将大型单体项目导入IDE,往往会导致反应迟钝,让人不知所措。

通过复合构建,你可以在同一个资源库中把你的monorepo分解成几个独立的构建。开发人员可以使用单独的构建来获得快速的周转,或者在他们想确保所有的东西都能很好地结合在一起时使用整个复合构建。

如果你打算从一个单体应用程序转移到多个独立的应用程序,复合构建现在提供了一个无缝迁移策略。

这只是一个开始

我们计划在接下来的版本中为复合构建添加一些改进:

  • 从命令行中锁定复合构建中的任务
  • 更丰富的依赖性替换API,支持自定义出版物
  • 并行执行包含的构建
  • 与Gradle的持续构建功能集成
  • 在IntelliJ和Eclipse中对复合构建的开箱支持

当然,没有什么比来自真实世界的使用反馈更重要。所以请在你自己的项目中尝试一下复合构建,或者看一下样本。让我们知道任何问题、建议和你用它构建的很酷的东西在Gradle论坛上。