Maven Central 是 Java、Kotlin 及其他 JVM 社区的重要资源。它是最受欢迎的开源库、开发人员工具、文档和其他构件的存储库。该服务不仅被开发人员大量使用,也被 CI/CD 流水线和自动化工具广泛使用。
虽然使用缓存代理来访问 Maven Central 是最佳实践,但并非所有人都这样做。这不仅会导致过高的流量成本和构建延迟,还会因为保护 Maven Central 的限流机制而使您的构建和流水线更容易出现缓慢和失败。
正如 Sonatype 的 CTO Brian Fox 在 2024 年 6 月的 这篇博客文章 中所写,“Maven Central 的总带宽有 83% 被仅占 1% 的...”
❯ 阅读更多
Gradle Build Tool,也称为 Gradle,是一个高度灵活且可扩展的构建系统。它支持多种方式来构建结构和配置,使其功能强大——但也有些令人生畏,尤其是对于刚起步的团队。
即使是经验丰富的开发人员和工具提供商,有时也会在 Gradle 的复杂性上遇到困难。我们从社区和我们最近的 开发者调查 中听到了很多这样的反馈。无论是从头开始设置构建、提高性能还是避免陷阱,团队经常发现自己正在寻找清晰的指导,以了解最佳的做事方式。
因此,我们与 JetBrains 和 Google 合作创建了 Gradle 最佳实践指南——这是一项重要的资源,可以帮助团队自信地构建并解决关于正确...的争论。
❯ 阅读更多
Gradle Build Tool 的 版本目录 是一个相当新的功能。它们通过提供一种标准化的方式来定义和访问项目中使用的依赖项目录,从而帮助管理依赖项——确保团队中的所有开发人员都对依赖项名称和定义保持一致,从而为每个人节省时间和认知负荷。与大多数 Gradle 功能一样,它们非常灵活,因此用户必须自己制定使用它们的约定。

在这篇博客文章中,我们将分享我们在 Develocity 团队在使用版本目录管理依赖项时所采用的一些最佳实践。特别是,我们将探讨我们如何派生的约定...
❯ 阅读更多
ℹ️ 2024 年 7 月 15 日更新 |
我们发现了一些导致插件解析失败的误报错误。已从列表中删除了 4 个插件,导致删除了 9 个依赖项。我们还添加了 105 个依赖于一个或多个受影响插件的插件。这些插件将通过传递性方式失败。未考虑 `exclude ` 导致了第一个更改,第二个更改来自未考虑插件依赖项。 |
现在 JFrog 已确认 JCenter 将永久重定向到 Maven Central,我们认为让 Gradle 插件门户用户了解该决定对门户和他们构建的影响非常重要。
❯ 阅读更多
我们与 Gradle 的 CTO Adam Murdoch 进行了一次 对话,他分享了从 Gradle 诞生之初的历程。Adam 提供了关于最新功能的见解,并讨论了构建工具的未来。
Gradle 的起源
Adam 大约在 2008 年开始接触 Gradle,当时他正在寻找 Ant 构建系统的强大替代品。他回忆道:“我当时正在寻找我们 Ant 构建系统的替代品,偶然发现了这个名为 Gradle 的新工具,开始使用它,[然后] 开始提交补丁进行改进。”
Gradle 的创始人 Hans Dockter 认可了 Adam 的贡献,并邀请他加入成为维护者。这次合作标志着...
❯ 阅读更多
引言
Google Summer of Code (GSoC) 项目已公布!
❯ 阅读更多
我们新的学习门户 DPE University 现已上线!我们发布了首批 10 门针对 Gradle Build Tool、Apache Maven、Develocity Build Scan 和 DPE 的免费、自定进度的课程。与我们一起学习最佳实践,提升您的 Gradle 技能,并提高您的开发人员生产力!
您可以在 gradle.com 上的 博客文章 中找到完整的 DPE University 公告。在这里,我们将重点介绍 Gradle Build Tool 的培训和内容。

可用课程
首批发布包括六门 Gradle Build Tool 课程,旨在帮助各种专业水平的开发人员和构建工程师:从初学者到大型开发者生产力平台的资深维护者。目前,以下 Gradle Build Tool 课程已可用
- Gradle 简介...
❯ 阅读更多
大家好!我代表 Gradle 社区,祝大家农历新年快乐!2023 年对于 Gradle Build Tool 来说是辉煌的一年,发布了许多新功能和计划。让我们回顾一下关键更新。
- Gradle 8 基线,包含 7 个功能丰富的版本
- Kotlin DSL 已成为 Gradle 的新默认设置
- 配置缓存、构建速度和可扩展性改进
- 我们首次参加 Google Summer of Code 和 Major League Hacking
- Gradle Enterprise 更名为 Develocity,以及 Gradle Build Scan 增强功能
- 下一步是什么,声明式 Gradle 和 Gradle 9 的路线图

Gradle 8
2023 年 2 月,Gradle 团队宣布了 Gradle 8.0 - 一个...
❯ 阅读更多
使 Gradle Build Tool 快速且可扩展的众多性能优化之一是编译规避。Gradle 通过确定编译结果是否相同来尽可能避免重新编译,即使上游依赖项已发生更改。
情况可以这样说明:如果类 `MyApp
` 和 `NumberUtils
` 在不同的项目中,并且 `MyApp
` 的项目在编译时依赖于 `NumberUtils
` 的项目,那么 `NumberUtils
` 的任何内部更改都不需要重新编译 `MyApp
` 项目。在更改之前和之后,`MyApp
` 都编译为相同的字节码,因此 Gradle 可以继续使用它已构建的 `MyApp.class
` 文件。
❯ 阅读更多
ℹ️ 2024 年 7 月 15 日更新 |
有关插件门户和JCenter的最新信息,请参阅我们最近的博客文章。 |
2023 年 6 月 23 日,UTC 时间 9:00,由于 JFrog 对 JCenter 上托管的构件进行了更改,Gradle 用户开始遇到从 Gradle 插件门户解析构件的问题。JCenter 停止直接提供文件,并将所有请求重定向到 Maven Central。这是一个未发布的更改。
我们联系了 JFrog,他们回复说这是一个测试,他们将恢复 JCenter 提供构件。
UTC 时间 18:30 左右,JCenter 恢复正常。
本文描述了此次中断对构建的影响,恢复类似中断的方法,...
❯ 阅读更多
Kotlin DSL for Gradle 在 2016 年 8 月的 Gradle Build Tool 3.0 版本中推出,并在 Gradle 5.0 中 作为 1.0 版本发布。自那时以来,它的受欢迎程度不断增长,并极大地改善了许多 Gradle 构建的编写体验。
Kotlin DSL 现在是创建新 Gradle 构建的默认选择。这意味着,在创建新项目时,包括在 IntelliJ IDEA(从 2023.1 开始)和 Android Studio(从 Giraffe 开始)中,Kotlin DSL 都是默认选项。对于现有项目或倾向于使用它的用户,将继续支持 Groovy DSL。
在这篇文章中,我们将探讨 Kotlin DSL 的优势以及为什么它正成为新 Gradle 的推荐选项...
❯ 阅读更多
《Gradle 工作原理》系列前文回顾
- Gradle 工作原理第 1 部分 - 启动
- Gradle 如何工作 第二部分 - 守护进程内部
这是Gradle 如何工作系列博客中的第三篇。在这篇博客中,我们将解释构建脚本执行期间会发生什么。
Kotlin & Groovy DSL
如果您是 Java 开发人员,当您打开任何 Gradle 构建脚本(例如 `build.gradle.kts
` 或 `build.gradle
`)时,您首先可能会感到困惑的是花括号的特殊语法。
// Kotlin DSL: plugins { id("some.plugin") version "0.0.1" } // or Groovy DSL: plugins { id "some.plugin" version "0.0.1" }
这是什么?Gradle 执行这些脚本时会发生什么?
...
❯ 阅读更多
《Gradle 工作原理》系列前文回顾
- Gradle 工作原理第 1 部分 - 启动
这是Gradle 如何工作系列博客中的第二篇。在这篇博客中,我们将解释 `Gradle Daemon JVM
` 内部发生的情况。
为什么我们需要 Gradle Daemon?
在上一篇博客中,我们提到 Gradle 启动了一个 `Gradle Daemon JVM
`(“守护进程”)来运行构建。用户指南解释了为什么我们需要守护进程。
守护进程是一个长期运行的后台进程,可以减少运行构建所需的时间。守护进程通过以下方式减少构建时间:
这是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 Build Tool 是一个开源项目,但许多设计工作并未像预期那样可见。在内部,我们使用设计规范来协作新的 Gradle 功能。为了使我们的开发过程更加开放和透明,我们的设计规范可通过 Google Drive 文件夹公开访问。
这仍然是一个进行中的项目,并且会随着时间的推移添加新文档。我们欢迎社区成员查看。您可以在所有进行中的文档上发表评论并提供反馈。我们计划使用这些文档来指导新的社区贡献。您可以随意在 GitHub 上链接这些文档或与他人分享。
与 公共路线图一起,我们希望...
❯ 阅读更多
我们最近注意到一些社区关于通过忽略不影响依赖项 ABI 的更改来加速 JVM 上 Gradle 编译的讨论。这是一个好主意!事实上,Gradle 从 3.4 版本开始就已经开箱即用地使用了 Java 的 ABI 来实现这一点,无需任何额外配置。我们将此功能称为***编译规避***。本文解释了 ABI 编译对平均工作流程意味着什么。剧透:利用编译规避是任何构建的最佳性能增强。
什么是应用程序二进制接口?
应用程序二进制接口 (ABI) 是从编译软件生成的接口,它定义了内部和外部的交互。ABI 代表了在编译时对消费者可见的内容。编译时...
❯ 阅读更多
测试不稳定性是自动化测试的主要挑战之一。尽管 Gradle 的重点是提高开发人员的生产力,但 Gradle 本身的发展也受到不稳定自动化测试的影响。本博客介绍了一些在开发 Gradle 时已被证明有效的最佳实践,这些实践是我们多年来与不稳定测试斗争中总结出来的。
故事
与其他许多项目一样,Gradle 的每次提交都必须通过数万次自动化测试。任何微小的间歇性故障都可能导致开发人员生产力损失。当我五年前加入 Gradle 时,CI 中充满了间歇性故障 - 人们会一遍又一遍地重新运行构建,希望能侥幸获得绿色构建。
之后,我们成立了一个专门的开发者生产力团队来处理...
❯ 阅读更多
在 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 调用都将得到优化,让您只需运行...
❯ 阅读更多
通过 `Plugin-Publish 插件` 的帮助,可以配置 Gradle 插件发布到门户。该插件的最新发布版本 1.0.0通过更强的约定和更简单的配置,显著改进了该过程。
更强的约定
Gradle 插件开发有着悠久的历史,并逐渐演变到使用辅助插件来帮助您设置插件项目。最重要的插件是
- Gradle 插件开发插件(`
java-gradle-plugin
`) - Maven 发布插件(`
maven-publish
`)
Plugin-Publish 插件与此历史悠久,它支持所有各种辅助插件的组合。这导致发布插件的方式过多,配置选项也过多,...
❯ 阅读更多
《远程和分布式构建模式》文章解释了远程和分布式构建之间的区别以及它们各自的变体。具体来说,我们区分了“测试分发”和“通用构建分发”。
本文从改进构建反馈时间的更广泛角度讨论分布式构建。我们将从解释工程师倾向于做出的更改类型开始,识别典型瓶颈,并分享这些更改与分布式构建的关系。我们还将研究通用构建分发的性能潜力。最后,我们将探讨一种改进构建反馈时间的整体方法。
下面将更详细地阐述这三个发现:
- 分布式构建不是调优良好的构建流程的替代品。
- 提高增量构建性能,而不是...
❯ 阅读更多
Gradle Build Tool 的一项频繁请求的功能是执行远程或分布式构建的能力。但这些究竟意味着什么?背后的动机又是什么?这篇文章将探讨远程与分布式构建之间的区别及其变体。由于行业内没有关于这些概念的一致术语约定,因此本文旨在概述这些模式以及它们之间的关系。
除了两个特定于 JVM 的引用外,这些观察结果通常适用于使用任何语言或生态系统的软件项目。
但为什么?
这些功能通常在缩短本地开发机器上的构建时间的背景下进行讨论。扩展的构建周转时间会阻碍生产力,无论是在...
❯ 阅读更多
技术领域缺乏多样性是一个长期存在且普遍存在的问题。例如,一项2021 年全球软件开发人员调查显示,女性软件开发人员仅占该群体的 5%。这是我们需要改变的。
为了促进我们行业的多样性,Gradle 很高兴地宣布一项新的导师计划。该计划对所有人开放,但我们将优先考虑来自代表性不足的开发者群体的学员,包括女性以及黑人和西班牙裔人士,他们希望获得 Gradle Build Tool 社区成员的支持和专业的职业发展。该计划的学员将能够就使用 Gradle Build Tool、构建自动化、开发人员生产力等方面进行个性化讨论。
我们的成员...
❯ 阅读更多
我们很高兴地宣布 Gradle Build Tool 的路线图现已公开。请参阅路线图板和相关的自述文件。
动机
Gradle Build Tool 项目定期发布充满新功能和错误修复的新版本。到目前为止,我们与用户社区沟通计划和获取反馈的主要渠道是版本说明、博客、问题跟踪器、论坛和社区 Slack。然而,我们缺乏对即将发布的版本中计划内容的更高层次的概述。
关于路线图
今天,我们宣布在 GitHub 上托管的新路线图板。它按季度和目标版本列出了主要项目和面向用户的特性。
该面板还显示了过去的...
❯ 阅读更多
2022 年 1 月 12 日,Gradle 用户遇到了从 Gradle 插件门户解析插件的问题,因为插件门户依赖的 JCenter 发生了中断。
本次事后分析提供了中断的时间线,描述了对 Gradle 用户的影响,以及为进一步减少 Gradle 插件门户对 JCenter 的依赖所采取的措施。
最后,我们还将讨论***您***如何保护***您的构建***免受此类中断的影响。
受 JCenter 项目依赖项中断影响的用户也应参考我们关于 JCenter 关闭的原始博客文章。
中断时间线
- 1 月 12 日下午 4:30 UTC中断开始
- Gradle 用户开始注意到构建中的插件解析失败。
- 1 月 12 日下午 4:56 UTC,...
❯ 阅读更多
新 Gradle 插件在被批准发布到插件门户之前会经过手动检查。现在,执行的大部分检查已完全自动化,以缩短插件作者的等待时间并降低人为错误的风险。本博客文章描述了影响社区插件作者的新自动化,并解释了它对生态系统安全的重要性。
插件发布安全
Gradle 的首要任务之一是降低供应链攻击的风险。这种阴险的攻击可能具有极大的规模和影响。例如,恶意的社区插件可能会感染大量使用 Gradle 构建的软件系统。您可以阅读更多关于此类攻击和...
❯ 阅读更多
ℹ️ 2024 年 7 月 15 日更新 |
有关插件门户和JCenter的最新信息,请参阅我们最近的博客文章。 |
2021 年 2 月 3 日,JFrog 宣布将关闭 Bintray 和 JCenter。本文介绍了您需要了解和执行的操作,以避免构建流水线中断。
您的构建可能以多种方式受到此关闭的影响:
社区是任何开源项目成功的关键。在 Gradle,我们非常幸运能够服务并与我们惊人的用户、倡导者和插件作者社区合作。
一些社区成员不遗余力地帮助其他用户取得成功。我们非常感谢他们的奉献精神。他们对社区的重要贡献包括在 Gradle 论坛和社区 Slack 上提供帮助,发布博客文章并在会议和用户组中发表演讲。
我们很高兴推出 Gradle 研究员计划,以表彰和联系这些个人,并发展这个全球 Gradle 专家社区,以帮助更广泛的 Gradle 社区提高生产力。
我们将支持 Gradle 研究员的努力,提供额外的...
❯ 阅读更多
引言
Gradle 已成为 JVM 生态系统(包括 Kotlin)中项目的首选构建工具。它是最受欢迎的构建...
❯ 阅读更多
Gradle 最成功的因素之一是其社区。用户每天都会提出新功能、发现并重现缺陷或提交包含贡献的拉取请求。我们非常感谢用户创建的每一个问题。谢谢!
在像 Gradle 这样的成功项目上工作伴随着挑战,无论是问题的数量还是贡献,还是决定哪个方面对团队来说是最高优先级的。尽管我们不愿承认,但我们的能力并非无限。我们希望我们的团队能够专注于为用户提供最大的价值。这意味着修复正确的问题并实现最佳功能。考虑到我们社区的多样性,这...
❯ 阅读更多
Gradle 6.0 是多年来在依赖管理方面创新改进的结晶。Gradle 秉持软件组合和重用不仅仅是把一组 jar 文件放在类路径上的理念,现在提供了一种新的元数据格式,可以丰富地定义通常由多个文件、不同变体和特定依赖项约束组成的软件组件。
特别是,在此次网络研讨会中,开发倡导者 Jenn Strater 和 Gradle 工程师 Jendrik Johannes 讨论了:
- 依赖管理中的新内容
- Java、Groovy 和 Scala 工具链改进
- 插件作者的新功能
您可以访问演示文稿的...
❯ 阅读更多
最近我正在帮助一个 Android 团队调查一个难以重现的问题,该问题表现为编译和注释处理任务的运行时间非常长。他们的大多数构建通常只需要几分钟就能完成,但有时却需要长达 30 分钟!在这些情况下,构建扫描几乎总是显示 Java 编译、Kotlin 编译或 Kapt 注释处理的某种组合是罪魁祸首。该团队对这个问题发生的频率以及在什么条件下发生几乎没有概念。该团队不知道这个问题发生的频率,以及在什么条件下。
Gradle Enterprise 尚未提供根据特定任务耗时查找构建的方法。但是,自定义***标签***可以轻松地为构建中可检测到的任何条件进行分类和查找。通过...
❯ 阅读更多
自 2017 年年中发布 4.0 版本以来,Gradle 发生了许多变化。
Gradle 5.0 比以前的版本更快、内存效率更高,拥有更好的工具来检查和管理传递依赖项,并通过新的 Kotlin DSL 提供您一直期望和期望的 IDE 辅助功能。
此次为期 1 小时的网络研讨会展示了 Gradle 5.0 的 4 个关键主题:
Gradle 的 Kotlin DSL 的作用以及谁应该采用它 如何充分利用增量编译和注释处理 为什么选择了意外的依赖项版本 X 以及如何修复它 Gradle 5.0 中有哪些新的任务 API 可用 如果您只想要信息,请查看此页面关于Gradle 5.0 亮点的介绍,并...
❯ 阅读更多
Gradle 正在更新提交到 Gradle 插件门户的插件的批准政策,该政策将于今天生效,旨在开始为插件消费者添加更强的安全保障。
首先,这不会影响已在插件门户上的插件,只影响新插件。使用插件的 Gradle 构建在任何方面都不会受到影响。
门户接受标准简述
Gradle 将检查新提交到 plugins.gradle.org 的插件的以下内容:
- 描述和项目 URL 有效且不具有误导性
- 组 ID 和构件 ID 有效且不具有误导性
除了这些更改之外,具有有效开源存储库 URL 的插件将优先于其他插件获得批准。正确应用 SPDX 兼容许可证的插件,即使...
❯ 阅读更多
Gradle 构建脚本示例现在在 Gradle 5.0 文档和许多 Gradle 指南中,除了 Groovy 片段外,还提供 Kotlin DSL 代码片段。
我们希望您能够在 README 和基于 Web 的文档中同时展示这两种 DSL,因此本文介绍了您可以在 GitHub 上和您的网站上以多种语言显示示例的方法。
GitHub 上的 Groovy 和 Kotlin DSL 示例
很少有开源项目没有 `README.md
` 或 `README.adoc
`。虽然没有太多方法可以使这些 README 页面具有交互性,但我们可以使用 `<details>
` 和 `<summary>
` HTML...
❯ 阅读更多
本文介绍了一个名为 Exemplar 的新库。Exemplar 的目标是确保用户获得预期的输出。它处理样本发现、规范化(语义上等效的结果,可能来自不同环境)和灵活的输出验证。它会在环境中调用任何命令行工具。您也可以调用 `curl
`,例如,来验证服务 API 响应。
Gradle 使用此库来验证文档和指南中的示例,并从集成测试中删除样板代码。
Exemplar 可以使用 JUnit 测试运行器(推荐)或使用其 API 进行配置。请参阅以下示例以及 Exemplar GitHub 仓库。

Exemplar 的用例
重要的是...
❯ 阅读更多
测试通常是开发过程中耗时最长的操作。不必要的运行它们是最终的时间浪费。Gradle 通过其 构建缓存和增量构建功能帮助您避免此成本。它知道您的任何测试输入(如代码、依赖项或系统属性)何时已更改。如果一切都保持不变,Gradle 将跳过测试运行,为您节省大量时间。
所以您可以想象当我在 StackOverflow 上看到类似这样的代码片段时有多绝望
tasks.withType(Test) { outputs.upToDateWhen { false } }
让我们谈谈这意味着什么,以及为什么这是一个糟糕的...
❯ 阅读更多
Maven Central 和 Bintray 已宣布将停用对 TLS v1.1 及以下版本的支持。如果您受到影响,以下是纠正 Gradle 构建所需了解的信息。
如果您正在使用 Java 6 或 7 并且正在使用 Gradle 版本 2.1 到 4.8,则需要采取行动。
如何检查您是否受到影响
在收到“无法解析 [坐标]”的错误消息后,您可能已经收到以下错误之一:
收到致命警告:protocol_version
或
对等方未通过身份验证
❯ 阅读更多
一个构建缓存允许 Gradle 重用***任何先前调用(包括来自其他机器的调用)***的任务输出。 Kotlin 1.2.21 允许 Kotlin 项目利用构建缓存。
构建缓存通过存储编译的类、测试输出和其他构建构件来实现,它会考虑所有任务输入,包括输入文件内容、相关类路径和任务配置。

这通常会带来***更快的构建***。下面的图表显示了 Gradle CI 部分在启用和禁用构建缓存时的聚合构建时间。

在本篇博客中,我们将解释如何使用 Gradle 的构建缓存来避免不必要的 Kotlin 编译以...
❯ 阅读更多
Java 9 引入了一项新的 Java 运行时功能,称为多版本 JAR。对我们 Gradle 来说,这可能是平台中最具争议的添加之一。简而言之,我们认为这是一个错误的答案。本文将解释我们为何这样认为,但也解释如果您确实想这样做,如何构建这些 JAR。
多版本 JAR,又名 MRJARs,是 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 支持的概述,涉及运行时、交叉编译、MRJARs 和 Jigsaw 模块支持。自上个月 Java 9 发布以来,我们接到了很多问题,并决定在此回答。
Gradle 4.2.1 版本支持的内容
截至 Gradle 4.2.1,构建和运行使用 JDK 9 主要发行版(如 Oracle JDK9、OpenJDK9 和 Azul JDK9)的 Java 应用程序已获得完全支持。此外,还支持交叉编译(由 JDK9 构建但在 JDK8 上运行)。
无论使用何种构建工具,某些构建在升级到 Java 9 时都会中断。Java 团队对 JDK 进行了良好且必要的更改,以促进更好的软件架构和安全性,但这已意味着删除对某些 API 的访问。即使您的项目已准备就绪,某些工具和 Gradle 插件尚未更新以与 Java 9 配合使用。
没有方便的方法来使用和组装多版本 JAR,但是如果您愿意,可以查看此 MRJAR-gradle 示例。
❯ 阅读更多
五个月前,我们宣布了 Gradle Script 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 自成立以来一直是一个开源项目,但作为一个团队,我们并不总是能体现现代开源协作的精神。例如,我们并未使人们能够轻松地了解我们正在进行的工作,并且我们没有一个清晰简单的流程供用户提交功能请求或针对适当的问题跟踪器报告错误。
我们很高兴地宣布,所有这些都将在今天发生变化。我们已经开放了 Gradle 存储库上的 GitHub 问题,以下是我们为将 Gradle 社区的需求置于首位而正在进行的即时、中期和长期更改。
❯ 阅读更多
欢迎来到新的 Gradle 博客。我谨代表整个团队,很高兴撰写这第一篇帖子,并分享一些我们正在做的事情。
主要是,我们正在构建这个新博客,因为我们希望确保用户了解 Gradle 领域最重要的发展。在过去的几年里,我们的团队发展迅速,因此我们发布了许多新功能和改进。然而,很多时候,我们发现潜在用户从未听说过它们。这篇最近的推文提供了一个完美的例子:
Cristian 的问题是合理的。我们在一年多前就发布了 Play 支持;我们在 Gradle 2.6 论坛公告和版本说明中提到了它,并且我们在用户手册中写了一个章节。但是,Cristian——以及可能还有很多人——错过了。为什么会这样?
❯ 阅读更多
通往 Gradle 3.0 的第一个里程碑版本***刚刚发布***,除了许多小型改进之外,它还包含两项我们希望您提供反馈的主要功能。
第一项功能是***支持使用 Kotlin 编写 Gradle 构建脚本***,您可以在上个月的Kotlin meets Gradle 博客文章中阅读所有内容。虽然仍处于早期开发阶段,但此功能现在已通过 Gradle 3.0 M1 开箱即用,我们非常希望听到您的想法。请参阅Gradle Script Kotlin 0.1.0 版本说明以获取完整详细信息和入门说明。
第二项功能是***Gradle Daemon 现在已默认启用***。这是一件***大事***,我...
❯ 阅读更多