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 慢的罕见情况,并修复了这些情况。以下截屏视频说明了您对 Gradle 3.0 与 Maven 的期望。此项目的功能是构建包含 25 个子项目,每个子项目大约有 200 个文件和单元测试。然后我们要求 Gradle 和 Maven 在不运行测试的情况下组装它。
最终,Gradle 和 Maven 之间最大的区别之一是 Gradle 知道任务的所有输入/输出。因此,它足够智能,可以知道何时必须执行某些操作或不执行某些操作。因此,当我们再次执行相同的任务时,如果没有任何更改,它将不会重新执行它们
查看我们的性能指南 #
拥有高性能的构建是构建幸福的关键!因此,我们非常关注 Gradle 本身的性能改进。然而,用户也可以做很多事情来加快他们的构建速度。为此,我们目前正在编写 性能指南,我们邀请大家阅读它。它目前是草稿形式,但已经包含许多关于如何使您的 Gradle 构建更快的有价值的提示。请务必阅读它,我们很乐意通过指南的 GitHub Issues 听到您的反馈。