Gradle 的演变 - 与 Adam Murdoch 的对话

我们与 Gradle 的 CTO Adam Murdoch 进行了一次 对话,谈论了他从 Gradle 的起源开始的旅程。Adam 分享了对最新功能的见解,并讨论了构建工具的未来。

Gradle 的起源

Adam 在 2008 年左右开始了他与 Gradle 的旅程,当时他正在寻找一个强大的替代方案来替代他当时使用的基于 Ant 的构建系统。他回忆道:“我当时正在寻找我们基于 Ant 的构建系统的替代方案,偶然发现了这个名为 Gradle 的新工具,开始使用它,[并且] 开始提交补丁以进行改进。”

Gradle 的创始人 Hans Dockter 认可了 Adam 的贡献,并邀请他加入成为维护者。这种合作标志着...的开始。

❯ 阅读更多

欢迎 Google Summer of Code 贡献者!

Google Summer of Code (GSoC) 项目已公布!GSoC 是一项全球性的在线计划,旨在将新的贡献者引入开源软件开发。贡献者在导师的指导下,与开源组织合作完成为期 12 周以上的编程项目。Gradle 自 2023 年起参与 GSoC,当时我们有一个项目将实验性的 Kotlin DSL 支持引入 Eclipse Buildship - 一套 Eclipse 插件,为 Gradle 在 Eclipse IDE 中提供深度集成。

今年,我们在 Kotlin 基金会和 Eclipse 基金会的支持下,进行三个项目。微软的 Visual Studio Code Java 团队也作为导师参与其中。热烈欢迎 Tanish RanjanSidhaarth Saraswathi Ramalingam 和...

❯ 阅读更多

DPE 大学 - 新的 Gradle 构建工具课程

我们的新学习门户网站 DPE 大学 现已上线!我们发布了首批 10 门免费的自学课程,涵盖 Gradle 构建工具、Apache Maven、Develocity 构建扫描和 DPE。与我们一起学习最佳实践,提升您的 Gradle 技能,提高开发效率!

您可以在 gradle.com 上的博文中 找到完整的 DPE 大学公告。在这里,我们将重点介绍 Gradle 构建工具的培训和内容。

alt_text

可用课程

初始版本包括六门针对 Gradle 构建工具的课程,旨在帮助具有任何专业知识的开发人员和构建工程师:从初学者到大型开发效率平台的资深维护人员。目前,以下针对 Gradle 构建工具的课程可用

  1. Gradle 入门...

    ❯ 阅读更多

2023 年农历新年回顾

大家好!代表 Gradle 社区,祝大家新年快乐!2023 年对于 Gradle 构建工具来说是伟大的一年,发布了许多新功能和举措。让我们回顾一下关键更新

  • Gradle 8 基线,包含 7 个功能丰富的版本
  • Kotlin DSL 成为 Gradle 的新默认值
  • 配置缓存、构建速度和可扩展性改进
  • 我们首次参加 Google Summer of Code 和 Major League Hacking
  • Gradle Enterprise 更名为 Develocity,以及 Gradle 构建扫描增强功能
  • 下一步,声明式 Gradle 和通往 Gradle 9 的道路

2023 Lunar Year in Gradle

Gradle 8

2023 年 2 月,Gradle 团队宣布了 Gradle 8.0 - 一...

❯ 阅读更多

深入了解 Gradle 的加速编译方法

Gradle 构建工具快速且可扩展的众多性能优化之一是避免编译。Gradle 通过确定编译结果是否相同来尽可能避免重新编译,即使上游依赖项已更改也是如此。

这种情况可以这样说明:如果类 MyAppNumberUtils 位于不同的项目中,并且 MyApp 的项目在编译时依赖于 NumberUtils 的项目,那么对 NumberUtils 的任何内部更改都不需要重新编译 MyApp 的项目。在更改之前和之后,MyApp 编译为相同的字节码,因此 Gradle 可以继续使用它已经构建的 MyApp.class 文件。

A... <p><a href=❯ 阅读更多

插件门户网站停机后续

2023 年 6 月 23 日协调世界时 9:00,Gradle 用户开始遇到从 Gradle 插件门户网站 解析工件的问题,因为 JFrog 对托管在 JCenter 上的工件进行了更改。JCenter 停止直接提供文件,并将所有请求重定向到 Maven Central。这是一个未经宣布的更改。

我们联系了 JFrog,他们回复说这是一个测试,他们会恢复到让 JCenter 提供工件。

协调世界时 18:30 左右,JCenter 恢复正常行为。

这篇文章描述了这次停机对构建的影响,从类似停机中恢复的方法,以及我们将采取哪些措施来消除将来对 JCenter 的依赖。

仍然直接使用 JCenter 的用户还应参考 我们最初的博客文章,了解关闭...

❯ 阅读更多

Kotlin DSL 现在是新 Gradle 构建的默认值

Gradle 的 Kotlin DSL 在 Gradle 构建工具的 3.0 版本中推出,时间是 2016 年 8 月,并在 Gradle 5.0 中发布为 1.0。从那时起,它越来越受欢迎,并且极大地改善了许多 Gradle 构建的编写体验。

Kotlin DSL 现已成为新 Gradle 构建的默认选择。这意味着,当使用 Gradle 创建新项目时,包括在 IntelliJ IDEA(从 2023.1 开始)和 Android Studio(从 Giraffe 开始)中,Kotlin DSL 是默认选项。对于现有项目或那些更喜欢使用 Groovy DSL 的用户,将继续支持 Groovy DSL。

在这篇文章中,我们将探讨 Kotlin DSL 的优势,以及为什么它正成为新 Gradle 的推荐选项...

❯ 阅读更多

Gradle 工作原理 第 3 部分 - 构建脚本

之前在 Gradle 工作原理

  1. Gradle 工作原理 第 1 部分 - 启动
  2. Gradle 工作原理 第 2 部分 - 守护进程内部

这是 Gradle 工作原理 系列的第三篇博文。在本博文中,我们将解释构建脚本执行期间发生的事情。

Kotlin & Groovy DSL

如果您是 Java 开发人员,当您打开任何 Gradle 构建脚本(例如 build.gradle.ktsbuild.gradle)时,最先让您感到困惑的可能是花括号的特殊语法。

// Kotlin DSL: plugins { id("some.plugin") version "0.0.1" } // or Groovy DSL: plugins { id "some.plugin" version "0.0.1" } 

这是什么?Gradle 在执行这些类型的脚本时会发生什么?

...

❯ 阅读更多

Gradle 工作原理 第 2 部分 - 守护进程内部

之前在 Gradle 工作原理

  1. Gradle 工作原理 第 1 部分 - 启动

这是 Gradle 工作原理 系列的第二篇博文。在本博文中,我们将解释 Gradle Daemon JVM (“守护进程”) 内部发生的事情。

为什么我们需要 Gradle 守护进程?

上一篇博文 中,我们提到 Gradle 启动了一个 Gradle Daemon JVM (“守护进程”) 来运行构建。 用户指南 解释了为什么我们需要守护进程。

守护进程是一个长生命周期的后台进程,它减少了运行构建所需的时间。守护进程通过以下方式减少构建时间:

  • 跨构建缓存项目信息

  • 在后台运行,因此每个 Gradle 构建都不必等待...

    ❯ 阅读更多

Gradle 工作原理 第 1 部分 - 启动

这是 Gradle 工作原理 系列的第一篇博文,其中包括以下主题

  • Gradle 如何启动
  • Gradle 构建中涉及多少个 JVM
  • 构建期间每个 JVM 中发生了什么

我们将在本博文中解释第一个主题 Gradle 如何启动。在继续阅读之前,我们假设您熟悉基本的 JVM/Gradle 概念(jar、classpath、wrapper、daemon、project、task 等)。

Gradle 如何启动

有许多方法可以启动 Gradle 构建

  • CLI 中的本地 Gradle 分发:/path/to/local/distribution/bin/gradle <SomeTask>
  • CLI 中的 Gradle Wrapper:./gradlew <SomeTask>
  • 在您的 IDE 中点击一个按钮来导入 Gradle 项目或运行一些测试/任务

有什么区别?什么...

❯ 阅读更多

介绍公共设计规范

Gradle 构建工具是一个开源项目,但很多设计工作并没有像它本该的那样可见。在内部,我们使用设计规范来协作开发新的 Gradle 功能。为了使我们的开发过程更加开放和透明,我们的设计规范通过一个 Google Drive 文件夹 公开提供。

这仍然是一个正在进行的工作,随着时间的推移,将添加新的文档。我们欢迎社区成员查看。您可以在所有仍在进行中的文档上发表评论并提供反馈。我们计划使用这些文档来帮助指导新的社区贡献。请随时在 GitHub 上链接到这些文档或与他人分享。

除了 公开路线图,我们希望...

❯ 阅读更多

编译避免

我们最近注意到社区中有一些关于通过忽略不影响依赖项 ABI 的更改来加快 Gradle 在 JVM 上的编译速度的讨论。这是一个好主意!事实上,Gradle 从 3.4 版本 开始就默认使用 ABI 来实现 Java 的编译避免,无需任何额外配置。我们将此功能称为 编译避免。这篇文章解释了基于 ABI 的编译对平均工作流程意味着什么。剧透:利用编译避免是任何构建的最佳性能增强之一。

什么是应用程序二进制接口?

应用程序二进制接口 (ABI) 是从编译软件生成的接口,它定义了内部和外部交互。ABI 代表了在编译时对消费者可见的内容。在编译一个...

❯ 阅读更多

我们在 Gradle 中如何处理不稳定的测试

测试不稳定性是自动化测试的主要挑战之一。尽管 Gradle 的重点是提高开发人员的生产力,但 Gradle 本身的开发也受到不稳定的自动化测试的影响。这篇博文解释了在开发 Gradle 时的一些最佳实践,这些实践在多年来我们与不稳定的测试作斗争中被证明是有效的。

故事

与许多其他项目一样,Gradle 的每次提交都必须通过数万次自动化测试。任何微小的不稳定性都可能导致开发人员生产力下降。当我 5 年前加入 Gradle 时,CI 充满了不稳定的测试失败——人们会一遍又一遍地重新运行构建,希望能够幸运地获得一个绿色构建。

后来,我们成立了一个专门的开发人员生产力团队来处理...

❯ 阅读更多

在 GitHub Actions 中使用 Gradle 的更好方法

在 GitHub Actions 上运行 Gradle 构建

GitHub Actions 为托管在 GitHub 上的项目提供了一个便捷且强大的 CI 平台。为了增强在 GitHub Actions 上构建 Gradle 项目的体验,Gradle 团队开发了 gradle-build-action。与 Gradle Build Scans™ 结合使用,gradle-build-action 在 Gradle 和 GitHub Actions 之间提供了深度集成,在使用 GitHub Actions 构建和测试 Gradle 项目时,提供了更轻松的设置和更好的体验。

gradle-build-action官方支持 的在 GitHub Actions 中运行 Gradle 构建的方式,负责为您的 GitHub Actions 工作流程准备和优化 Gradle。当应用于工作流程时,所有后续的 Gradle 调用都将被优化,允许您简单地运行...

❯ 阅读更多

简化插件发布插件

使用 Portal 上的 Plugin-Publish 插件 配置 Gradle 插件的发布。最近发布的 1.0.0 版本 的插件通过更强烈的意见和更直接的配置,显著地改进了该过程。

更强的约定

Gradle 插件开发有着悠久的历史,并且逐渐发展到使用辅助插件来帮助您设置插件项目。最重要的插件是

Plugin-Publish 插件也共享着这段悠久的历史,它最终支持了所有辅助插件的各种组合。这导致了太多发布插件的方式,以及太多配置选项,...

❯ 阅读更多

通用构建分发:游戏规则改变者还是噱头?

远程和分布式构建模式》文章解释了远程构建和分布式构建之间的区别,以及每种构建的变体。具体来说,我们区分了“测试分布”和“通用构建分布”。

本文从更广阔的视角讨论分布式构建,以提高构建反馈时间。我们将首先解释工程师倾向于进行的更改类型,识别典型的瓶颈,并分享这些瓶颈与分布式构建之间的关系。我们还将研究通用构建分布的性能潜力。最后,我们将探索一种提高构建反馈时间的整体方法。

在下面更详细地,我们将详细阐述这三个发现。

  • 以分布式方式构建不能替代经过良好调整的构建过程。
  • 提高增量构建性能,而不是...

    ❯ 阅读更多

远程和分布式构建模式

Gradle 构建工具的一个经常被请求的功能是能够执行远程或分布式构建。但这到底意味着什么?请求背后的动机是什么?这篇文章将探讨远程构建与分布式构建之间的区别及其变体。由于这些概念没有行业范围内的统一术语,因此这篇文章的目的是概述这些模式以及它们之间的关系。

除了两个特定于 JVM 的引用之外,这些观察结果通常适用于使用任何语言或生态系统的软件项目。

但为什么?

这些功能通常在缩短本地开发人员机器上的构建时间的情况下进行讨论。构建周转时间延长会阻碍生产力,无论是在...

❯ 阅读更多

导师计划公告

技术领域缺乏多样性是一个长期存在的普遍问题。例如,2021 年全球软件开发人员调查显示,女性软件开发人员仅占人口的 5%。这是我们需要改变的事情。

为了帮助促进我们行业的多样性,Gradle 很高兴地宣布一项新的导师计划。该计划对所有人开放,但我们将优先考虑来自开发人员社区中代表性不足的群体,包括女性、黑人和西班牙裔的受助者,他们希望从 Gradle 构建工具社区成员那里获得支持和增强的职业发展。该计划中的受助者将有机会参与关于使用 Gradle 构建工具、构建自动化、开发人员效率等的个性化讨论。

我们社区的成员...

❯ 阅读更多

Gradle 公共路线图

我们很高兴地宣布 Gradle 构建工具路线图现已公开。请查看 路线图看板 和相关的 自述文件

动机

Gradle 构建工具项目定期发布包含新功能和错误修复的新版本。到目前为止,我们与用户社区分享计划和获取反馈的主要渠道是 发行说明博客问题跟踪器论坛社区 Slack。但是,我们缺乏对即将发布的版本中计划内容的高级概述。

关于路线图

今天,我们宣布了我们新的 路线图看板,它托管在 GitHub 上。它列出了主要项目和面向用户的功能,按季度和目标版本进行组织。

该看板还显示了过往...

❯ 阅读更多

Gradle 插件解析中断事后分析

2022 年 1 月 12 日,Gradle 用户在解析来自 Gradle 插件门户 的插件时遇到了问题,因为插件门户依赖的 JCenter 出现了中断,导致部分功能无法使用。

这份事后分析提供了中断的时间线,描述了对 Gradle 用户的影响,以及为进一步减少 Gradle 插件门户对 JCenter 的依赖而采取的措施。

最后,我们还将讨论如何保护您的构建免受此类中断的影响。

受 JCenter 中断影响的项目依赖项用户还应参考 我们最初的博客文章,了解 JCenter 关闭的信息。

中断时间线

UTC 时间 1 月 12 日下午 4:30 中断开始
Gradle 用户开始注意到插件解析在构建中失败。
UTC 时间下午 4:56...

❯ 阅读更多

插件发布的自动反馈

新的 Gradle 插件在被批准发布到 插件门户 之前会经过人工检查。大多数执行的检查现在已完全自动化,以减少插件作者的等待时间并降低人为错误的风险。这篇博文描述了影响社区插件作者的新自动化,并解释了它对生态系统安全的重要性。

插件发布安全

Gradle 的优先事项之一是降低供应链攻击的风险。这种阴险的攻击可能具有非常大的规模和影响。例如,一个恶意的社区插件可能会感染大量使用 Gradle 构建的软件系统。您可以阅读更多关于此类攻击的信息以及...

❯ 阅读更多

JCenter 关闭对 Gradle 构建的影响

2021 年 2 月 3 日,JFrog 宣布他们将关闭 Bintray 和 JCenter。这篇文章告诉您需要了解和做些什么才能避免构建管道的中断。

您的构建可能会受到此关闭的多种影响

此外,您应该注意从一个存储库迁移到另一个存储库时的 安全注意事项

更新:JFrog 已决定将 JCenter 保留为只读...

❯ 阅读更多

介绍 Gradle Fellowship 计划

社区对于每个开源项目的成功至关重要。在 Gradle,我们很幸运能够服务于并与一个由用户、倡导者和插件作者组成的令人惊叹的社区合作。

一些社区成员竭尽全力帮助其他用户取得成功。我们对他们的奉献精神表示衷心的感谢。他们对社区的宝贵贡献包括帮助其他人使用 Gradle 论坛社区 Slack,发布博文并在会议和用户组中进行演示。

我们很高兴推出 Gradle Fellowship 计划,以表彰和联系这些个人,并发展这个全球 Gradle 专家社区,帮助更广泛的 Gradle 社区提高生产力。

我们将通过提供额外的...来支持 Gradle Fellows 的努力。

❯ 阅读更多

Gradle 与 Bazel 在 JVM 项目中的比较

简介

Gradle 已成为 JVM 生态系统(包括 Kotlin)中项目的首选构建工具。它是最流行的构建...

❯ 阅读更多

优化 Gradle 问题积压

Gradle 最大的成功因素之一是其社区。每天都有用户提出新功能建议、发现和重现缺陷,或提交包含贡献的拉取请求。我们感谢用户创建的每一个问题。谢谢!

像 Gradle 这样成功的项目也面临着挑战,无论是问题和贡献的数量,还是决定哪个方面对团队来说优先级最高。虽然我们不喜欢承认,但我们的能力不是无限的。我们希望我们的团队能够专注于为用户创造最大价值。这意味着修复正确的错误并实现最佳功能。鉴于我们社区的多样性,这...

❯ 阅读更多

Gradle 6.0 的新功能

Gradle 6.0 是多年来依赖管理创新改进的结晶。Gradle 现在提供了一种新的元数据格式,以丰富地定义软件组件,这些组件通常由多个文件、不同的变体和对依赖项的特定约束组成,它拥抱了软件组成和重用不仅仅是将一组 jar 文件放在类路径上的理念。

特别是,在本网络广播中,开发者倡导者 Jenn Strater 和 Gradle 工程师 Jendrik Johannes 讨论了

  1. 依赖管理中的新功能
  2. Java、Groovy 和 Scala 工具链改进
  3. 插件作者的新功能

您可以访问...

❯ 阅读更多

使用构建扫描标签进行临时根本原因分析

最近,我帮助一个 Android 团队调查了一个难以重现的问题,该问题表现为非常长的编译和注释处理任务。他们的大多数构建只需要几分钟就能完成,但有时却需要长达 30 分钟!在这些情况下,构建扫描总是显示 Java 编译、Kotlin 编译或使用 Kapt 的注释处理是罪魁祸首。该团队并不知道开发人员遇到此问题的频率以及在什么情况下会遇到此问题。

Gradle Enterprise 尚未提供根据特定任务执行时间查找构建的方法。但是,自定义**标签**使您可以轻松地对满足任何条件的构建进行分类和查找,这些条件可以在构建中检测到。通过...

❯ 阅读更多

Gradle 5.0 新特性

自 2017 年年中发布 4.0 版本以来,Gradle 发生了很大变化。

Gradle 5.0 比之前的 Gradle 版本速度更快,内存效率更高,拥有更好的工具来检查和管理传递依赖,并可以通过新的 Kotlin DSL 提供您一直希望和期望的 IDE 帮助。

这个时长 1 小时的网络广播演示了 Gradle 5.0 的 4 个关键主题

Gradle 的 Kotlin DSL 的作用以及谁应该采用它 如何充分利用增量编译和注解处理 为什么选择意外的依赖版本 X 以及如何修复它 Gradle 5.0 中有哪些新的任务 API 如果您只想要信息,请查看此页面上的 Gradle 5.0 的亮点 和...

❯ 阅读更多

Gradle 插件门户批准政策更新

Gradle 正在更新提交到 Gradle 插件门户 的插件的插件批准政策,从今天起生效,以开始为插件使用者添加更强大的安全保障。

首先,这不会影响已经存在于插件门户上的插件,只影响新的插件。使用插件的 Gradle 构建不会受到任何影响。

门户接受标准概括

Gradle 将检查提交到 plugins.gradle.org 的新插件的以下内容

  • 描述和项目 URL 有效且不误导
  • 组 ID 和工件 ID 有效且不误导

除了这些更改之外,具有有效开源仓库 URL 的插件将优先于其他插件进行批准。那些正确应用 SPDX 兼容许可证的插件,甚至...

❯ 阅读更多

如何在并排显示 Groovy 和 Kotlin DSL 示例

Gradle 构建脚本示例现在在 Gradle 5.0 文档 和许多 Gradle 指南 中的 Groovy 代码段旁边有 Kotlin DSL 代码段。

我们希望您能够在您的 README 和基于 Web 的文档中显示两种 DSL,因此这篇文章展示了如何在 GitHub 上的多种语言您的网站 上显示示例。

GitHub 上的 Groovy 和 Kotlin DSL 示例

很难找到没有 README.mdREADME.adoc 的 OSS 项目。虽然没有太多方法可以使这些 README 页面交互式,但我们可以使用 <details><summary> HTML...

❯ 阅读更多

介绍用于自动样本测试的 Exemplar

这篇文章介绍了一个名为 Exemplar 的新库。Exemplar 的目标是确保用户获得他们期望看到的输出。它处理示例发现、规范化(语义上等效的结果,可能来自不同的环境)和灵活的输出验证。它调用环境中要调用的任何命令行工具。您还可以调用 curl,例如,来验证服务 API 响应。

Gradle 使用此库来验证文档和指南中的示例,并从集成测试中删除样板代码。

Exemplar 可以使用 JUnit 测试运行器(推荐)或使用其 API 进行配置。请参阅以下示例以及 Exemplar GitHub 仓库 中的示例。

Exemplar Information Flow

Exemplar 的用例

重要的是...

❯ 阅读更多

停止重新运行您的测试

测试通常是开发过程中运行时间最长的操作。不必要地运行它们是最终的浪费时间。Gradle 通过其 构建缓存增量构建 功能帮助您避免此成本。它知道您的任何测试输入(如您的代码、您的依赖项或系统属性)是否已更改。如果一切保持不变,Gradle 将跳过测试运行,为您节省大量时间。

所以你可以想象当我看到 StackOverflow 上的这些代码片段时我的绝望

tasks.withType(Test) { outputs.upToDateWhen { false } } 

让我们谈谈这意味着什么以及为什么它是一个糟糕的...

❯ 阅读更多

修复 TLS v1.1 和 v1.0 支持停止时 Gradle 依赖项解析

Maven Central 和 Bintray 已宣布将停止对 TLS v1.1 及更低版本的支持。如果您受到影响,以下是如何纠正您的 Gradle 构建。

如果您使用的是 Java 6 或 7 以及 Gradle 版本 2.1 到 4.8,则需要采取措施。

如何检查您是否受到影响

在出现“无法解析 [坐标]”的错误消息后,您可能已经从构建中收到以下错误之一。

收到致命警报:protocol_version

对等方未经身份验证

❯ 阅读更多

使用 Kotlin 的 Gradle 构建缓存

构建缓存 允许 Gradle 重用来自任何先前调用(包括来自其他机器的调用)的任务输出。 Kotlin 1.2.21 允许 Kotlin 项目利用构建缓存。

构建缓存通过存储编译后的类、测试输出和其他构建工件到缓存中来工作,同时考虑所有任务输入,包括输入文件内容、相关类路径和任务配置。

Build Cache topological diagram

这通常会导致更快的构建。下图显示了 Gradle CI 部分使用和不使用构建缓存的汇总构建时间。

Build minutes saved with Gradle build cache

在这篇文章中,我们将解释如何使用 Gradle 的构建缓存来避免不必要的 Kotlin 编译,以...

❯ 阅读更多

多版本 JAR - 好主意还是坏主意?

Java 9 带来了一个名为多版本 JAR 的 Java 运行时新功能。对于我们 Gradle 来说,这可能是平台上最具争议的添加之一。TL/DR,我们认为这是一个对真实问题的错误答案。这篇文章将解释我们为什么这样认为,但也解释了如果你真的想构建这样的 JAR,你可以如何构建它们。

多版本 JAR,也称为 MRJAR,是 Java 平台的新功能,包含在 Java 9 JDK 中。在这篇文章中,我们将详细说明采用这项技术的重大风险,并提供如何在需要时使用 Gradle 生成和使用多版本 JAR。

简而言之,多版本 JAR 允许你打包同一类的多个版本,供不同的运行时使用。例如,如果你在 JDK 8 上运行,Java 运行时将使用该类的 Java 8 版本,但如果你在 Java 9 上运行,它将使用 Java 9 特定的实现。类似地,如果为即将发布的 Java 10 版本构建了一个版本,那么运行时将使用它,而不是 Java 9 和默认(Java 8)版本。

❯ 阅读更多

Gradle Java 9 支持现状

这篇文章概述了 Gradle 的 Java 9 支持,涉及运行时、交叉编译、MRJAR 和 Jigsaw 模块支持。自从上个月 Java 9 发布以来,我们收到了很多问题,因此我们决定在这里回答。

Gradle 4.2.1 版本支持的内容

从 Gradle 4.2.1 开始,使用 Oracle JDK9、OpenJDK9 和 Azul JDK9 等主要 JDK 9 发行版构建和运行 Java 应用程序已完全支持。此外,还支持交叉编译(由 JDK9 构建,但在 JDK8 上运行)。

无论使用什么构建工具,升级到 Java 9 时,一些构建都会中断。Java 团队对 JDK 做了一些必要的更改,以促进更好的软件架构和安全性,但这意味着要删除对某些 API 的访问权限。即使您的项目已准备就绪,一些工具和 Gradle 插件尚未更新以与 Java 9 兼容。

没有用于使用和组装多版本 JAR 的便捷方法,但如果您想使用它们,可以查看此 MRJAR-gradle 示例

❯ 阅读更多

Gradle 脚本 Kotlin 1.0 之路

五个月前,我们 宣布了 Gradle 脚本 Kotlin 的第一个预发布版,我们认为现在是回顾我们取得的进展的好时机。在此期间,我们发布了八个额外的预发布版,通往 1.0 的道路每天都更加清晰。那么,让我们看看我们已经走过的路,以及我们未来的方向吧?

v0.1.0

您可能还记得,这是我们 hello-world 示例 在我们首次发布时的样子

import org.gradle.api.plugins.*
import org.gradle.script.lang.kotlin.*

apply<ApplicationPlugin>()

configure<ApplicationPluginConvention> {
    mainClassName = "samples.HelloWorld"
}

repositories {
    jcenter()
}

dependencies {
    "testCompile"("junit:junit:4.12")
}

❯ 阅读更多

现在开放:Gradle 的 GitHub 问题

Gradle 自成立以来一直是一个开源项目,但作为团队,我们并没有始终如一地践行现代开源协作的精神。例如,我们没有让大家轻松地了解我们正在进行的工作,也没有一个清晰简单的流程供用户针对适当的问题跟踪器提交功能请求或错误。

我们很高兴地宣布,这一切都将从今天开始改变。我们在 Gradle 存储库中开放了 GitHub 问题,以下是我们正在进行的立即、中期和长期更改,以将 Gradle 社区的需求置于首位,并始终保持这种状态。

❯ 阅读更多

再次问候

欢迎来到新的 Gradle 博客。代表整个团队,我很高兴写下这篇文章,并分享一些我们正在做的事情。

主要原因是,我们正在建立这个新的博客,因为我们希望确保用户能够了解 Gradle 领域中最重要的发展。我们的团队在过去几年里迅速发展,因此我们发布了许多新功能和改进。然而,我们经常发现,潜在用户从未听说过这些功能。这条最近的推文就是一个很好的例子。

Cristian 的问题是合理的。我们在一年前就发布了 Play 支持;我们在 Gradle 2.6 的 论坛公告发布说明 中提到了它,并且我们在用户手册中 专门写了一章 来介绍它。然而,Cristian 以及可能还有许多其他人错过了它。这是怎么回事呢?

❯ 阅读更多

Gradle 3.0 M1:释放守护进程!

面向 Gradle 3.0 的第一个里程碑版本 刚刚发布,除了许多较小的改进之外,它还包含两个主要功能,我们希望得到您的反馈。

第一个功能是 **支持使用 Kotlin 编写 Gradle 构建脚本**,您可以在上个月的 Kotlin 与 Gradle 博客文章中阅读所有相关内容。虽然该功能仍处于开发初期,但现在已在 Gradle 3.0 M1 中开箱即用,我们很乐意听取您的意见。请参阅 Gradle 脚本 Kotlin 0.1.0 版本说明 以获取完整详细信息和入门说明。

第二个功能是 **Gradle 守护进程现在默认启用。** 这是一个 **重大事件**,我...

❯ 阅读更多