Gradle 软件模型的现状与未来
引言
我们收到了许多关于 Gradle 软件模型 状态和方向的咨询,特别是来自构建原生库和应用程序的用户。
在这篇博文中,我们将解释软件模型的当前状态和未来,特别是它与 Gradle 进行原生开发的关系。2017 年剩余时间里,许多令人兴奋的改进正在计划中;请参阅 下方的路线图。
软件模型的情况 #
简而言之,软件模型是一种非常声明式的方式来描述软件的构建方式以及在此过程中所需的其他组件作为依赖项。它还为配置 Gradle 构建提供了一个新的、基于规则的引擎。当我们开始实现软件模型时,我们为自己设定了以下目标:
- 提高配置和执行时间的性能。
- 简化具有复杂工具链的构建定制。
- 提供一种更丰富、更标准化的方式来模拟不同的软件生态系统
在开发软件模型期间,Gradle 工程团队不断尝试将这些概念内化到现有的软件生态系统中。用于构建原生应用程序的 Gradle 插件目前完全基于软件模型。类似地,为 Android 和 Java 等生态系统开发了实验性的基于软件模型的插件。
Gradle 在原生生态系统中的采用正在加速,我们的投入也是如此。自推出以来,Gradle 的原生支持已被证明是使用 Make 进行构建的受欢迎的替代方案。凭借其声明式和富有表现力的模型、对不同工具链和平台的支持以及并行编译等功能,它为构建原生库和应用程序提供了一种革命性的方式。
演进新的配置和软件模型并使其像当前的 Java 和 Android Gradle 模型一样强大比我们预期的要花费更长的时间。与此同时,Gradle 的采用量呈爆炸式增长,许多复杂的构建正在使用当前模型,并且拥有一个由 1500 多个社区插件组成的充满活力的生态系统。我们低估了这些构建和插件迁移到新模型的复杂性,并看到了许多合作伙伴在进行此次迁移时可以理解的阻力。
事后看来,新软件和配置模型的范围太大了。这就是为什么在 2016 年 Gradle Summit 上,Hans Dockter 宣布我们将把其中许多功能回溯到当前模型。一年后,Java 和 Android 生态系统的大部分功能都已回溯。这包括支持变体的依赖解析以及 Java 组件的 API 和实现的分离。这些功能在 增量编译避免和 性能 方面是革命性的。此外,我们发现了其他大幅提高 Gradle 配置性能的方法,并且还将有更多改进。不再需要对 Gradle 构建的配置方式进行重大的、不兼容的更改。
前进的道路 #
因此,您可能想知道软件模型发生了什么。我们正在将原生支持的配置 DSL 移植到当前模型。因此,声明性本质和强大的建模语言将保持不变。软件模型附带的规则引擎将被弃用。 `model` 块下的所有内容都将作为扩展移植到当前模型。原生用户将不再与其余 Gradle 社区拥有单独的扩展模型,并且他们将能够利用新的支持变体的依赖管理。
路线图是什么样的?以下是我们到年底的关注领域:
- 当前模型对原生的支持。基于当前模型的新插件集正在开发中,并且在每次 nightly 发布时都在改进。它们仍需要更多工作才能达到功能奇偶性和稳定性,但已经提供了大量功能。 尝试一下 并给我们反馈。
- 编译和链接任务默认并行。通过为编译和链接任务启用默认并行来为原生生态系统计划性能改进。这将对所有使用 Gradle 构建原生的用户产生积极影响。
- 传递依赖解析。我们将此强大功能从我们的 JVM 生态系统移植过来,以帮助原生开发人员声明原生项目之间丰富的依赖关系。
- 当前模型上的新原生插件。我们的计划是提供大部分软件模型插件功能的插件,并且还将具有重要的功能,例如构建缓存和原生外部源依赖项。
- 改进的工具链支持。我们正在努力解决工具链声明中的一些问题,这对于嵌入式开发尤其重要。
有关最完整和最新的进展,我们建议查看 gradle-native 项目,这是原生生态系统功能规划的家园。
用户从软件模型插件迁移到新插件将非常无缝。所有核心原生任务都将被重用,并且工具链概念将被移植到当前模型。我们预计您的许多构建逻辑都可以简单地重用。我们将长期支持基于软件模型的插件,以确保每个人都能成功迁移。
如果您目前正在使用或计划使用 Gradle 来构建原生项目,请继续这样做。Gradle 的原生支持已被一次又一次地证明比当前可用的工具更具性能、更灵活、更易于使用。
令人兴奋的进展 #
今天,我们正在进行 IDE 集成和 XCTest 支持,提供开箱即用的 HTML 报告生成和 完整的构建扫描支持。工具链定义也将得到改进,以便更容易地与替代工具链家族集成;这对投入到嵌入式世界的用户尤其令人兴奋。
对于多存储库的开发人员,您将很高兴知道 复合构建 将适用于所有原生项目。
新插件将与 Kotlin DSL 集成,为 Gradle 用户提供适当的 IDE 支持,包括自动完成和重构。
我们将首先在当前模型中实现原生开发的全套工作流程,无需任何自定义 - 即没有平台、构建类型或工具链配置。通过工作流程,我们指的是与构建二进制文件、测试、打包、部署以及与您喜欢的 IDE 集成相关的所有内容。起初,工作流程将适用于最常见的情况。在后续版本中,我们将逐步为整个工作流程添加自定义。
社区参与 #
我们的原生社区是 论坛 上最活跃和最敬业的社区之一,我们希望进一步鼓励和发展这种参与。请继续在论坛上互相帮助找到您想要的答案,还可以通过尝试 各种原生示例项目、订阅 gradle-native 项目 并提交问题、对您最看重的问题进行投票,甚至考虑提交拉取请求(如果您愿意卷起袖子帮忙)来与我们互动。
了解原生平台支持的最新信息的最佳方式是订阅 月度新闻通讯 或 Twitter 上更频繁的公告。
我们期待与您合作,开发最佳的原生构建工具!