Gradle 3.0 M2:初步支持 Java 9 和性能改进

Gradle 3.0 的第二个里程碑版本 刚刚发布,此版本包含对 Java 9 的初步支持!

这意味着 Gradle 现在可以在最新的 Java 9 EAP 版本上正常运行,但也意味着您可以使用早期版本的 JDK 9 构建和运行测试。但是,重要的是要了解,虽然您可以使用 JDK 9 编译和测试应用程序,但我们**不支持**模块,也不支持任何 JDK 9 特定的编译选项(如-release-modulepath)。但是,我们很乐意收到您对您自己项目的任何反馈。

更多性能改进

这个里程碑也是一个很好的时机,可以查看我们最新的性能改进。在实际的构建中进行测量总是更好的,因此下面的示例使用Golo 编程语言作为实验对象,并比较了该项目干净构建的执行时间。左侧窗格使用 Gradle 2.12,而右侧窗格使用 Gradle 3.0 M2 以及一个“热”守护进程

如您所见,默认情况下使用守护进程会使您的构建速度明显加快,尽管自 Gradle 2.12 以来我们所做的性能改进不仅仅是使用守护进程。对于那些在 Gradle 的先前版本中已经启用它的人,您也应该看到更好的性能,正如下一个屏幕截图所示

自 Gradle 2.12 以来,我们已经取得了重大进展,可以用几句话概括

  • 配置时间现在更快,这意味着从您调用 Gradle 任务到实际执行该任务的时间要短得多。在大型多模块构建中尤其明显。
  • 使用守护进程的执行已优化,这意味着在 Gradle 3.0 中默认情况下启用它,您将立即从更快的构建中受益
  • 构建脚本缓存已重新设计,以便后续构建不仅配置更快,而且并发运行的构建不再挂起。这对在 CI 服务器上运行的非隔离构建尤其重要

为了说明这些改进,我们尝试使用守护进程在Apereo CAS 项目上执行gradle help,该项目包含一个大型多项目构建,通常会从这些改进中受益匪浅。同样,左侧使用 Gradle 2.12,而右侧使用 3.0 M2

最后但并非最不重要的一点是,我们还查看了 Gradle 仍然比 Maven 慢的罕见情况,并修复了这些问题。以下屏幕截图说明了与 Maven 相比,您对 Gradle 3.0 的期望。该项目包含一个包含 25 个子项目的构建,每个子项目大约有 200 个文件和单元测试。然后我们要求 Gradle 和 Maven 都组装它,而不运行测试。

最终,Gradle 和 Maven 之间最大的区别之一是 Gradle 能够感知所有任务的输入/输出。因此,它足够智能,可以知道何时需要执行任务,何时不需要。所以,当我们再次执行相同的任务时,如果没有任何改变,它就不会重新执行它们。

查看我们的性能指南

拥有高性能构建是构建幸福的关键!因此,我们非常重视 Gradle 本身的性能改进。但是,用户也可以做很多事情来使他们的构建更快。为此,我们目前正在编写一个 性能指南,我们邀请大家查看它。它目前处于草稿形式,但已经包含了许多关于如何使您的 Gradle 构建更快的宝贵提示。请务必阅读它,我们很乐意通过指南的 GitHub Issues 听到您的反馈。

讨论