与 Louis Jacomet 一起迈向 Gradle 9

在 Devoxx France,我们与 Gradle Inc. 的技术主管 Louis Jacomet 坐下来聊了聊。Louis 领导 Gradle 构建工具支持团队并协调发布,因此您经常可以在 GitHub 问题中看到他活跃的身影,并在 Gradle 会议上发言。让我们深入了解 Louis 关于即将发布的 Gradle 9 版本的分享!

alt_text

Devoxx FR 的繁忙的一天

Louis 在 Devoxx FR 的星期五有一个紧凑的日程安排,安排了 4 个小时的演讲。他与 Apache Maven 社区的 Hervé Boutemy 共同进行了一场关于导航依赖管理迷宫的会议,这是一场为时 1 小时的演讲。他还与同事 Paul Merlin 进行了单独讨论,讨论了即将发布的功能...

❯ 阅读更多

Gradle 与 GitHub 合作进行供应链安全

Gradle 很高兴宣布与 GitHub 建立技术合作伙伴关系,重点关注多个领域,首先是供应链安全和开发人员体验。通过此次合作,我们将建立组织之间的直接联系,并计划在 GitHub 和 Gradle 之间的集成方面进行合作,以促进 Gradle 用户之间的最佳安全实践。

作为此次合作的一部分,第一个发布的功能是 Gradle 的依赖项提交 GitHub Action,可以将其配置为自动将依赖项提交到 GitHub 的依赖项图,帮助用户更好地了解其应用程序并接收 Dependabot 警报。

此次合作将改善 Gradle 和 GitHub 生态系统中许多用户的体验。GitHub 是全球领先的 AI 驱动的开发人员平台,用于构建、扩展和交付安全软件,...

❯ 阅读更多

声明式 Gradle

注意:声明式 Gradle 是一个正在积极开发的实验性项目,在实施过程中会发生频繁的更改。要了解有关当前状态的更多信息,请访问 GitHub 上的声明式 Gradle 存储库。在这里,您可以访问当前文档、原型和 项目状态板。订阅 Gradle Build Tool 新闻稿 以接收有关该项目的每月更新 - 最后更新于 2024 年 5 月 11 日

我们对 Gradle Build Tool 的愿景的一部分是提供一种优雅且可扩展的声明式构建语言,使开发人员能够以清晰易懂的方式描述任何类型的软件。

Gradle 的构建语言已经在最基本的方式上是可扩展的,这带来了高度的灵活性。这...

❯ 阅读更多

构建配置输入跟踪的改进

配置缓存 是一项功能,它通过缓存配置阶段的结果并在后续构建中重用它来显着提高构建性能。使用配置缓存,Gradle Build Tool 可以完全跳过配置阶段,前提是不会影响构建配置的任何内容(例如构建脚本)发生更改。

在 Gradle 8.1 中,配置缓存已稳定并建议采用。在这种情况下,稳定意味着行为已最终确定,所有重大更改都遵循 Gradle 弃用流程。一般来说,如果现在有效,它将继续以相同的方式工作,除非行为有错误,并且可能导致构建不正确。虽然某些功能 尚未实现,但大多数用户已经可以从中受益...

❯ 阅读更多

更简单的 Kotlin DSL 属性赋值

使Kotlin DSL 成为新 Gradle 构建的默认选项成为可能的一项改进是提供了一种更简单的方法来使用延迟属性分配值。

在这篇博文中,我们将解释延迟属性分配是什么,以及如何在最新 Gradle 版本中利用新语法。

什么是延迟属性 API?

延迟属性 API 是 Gradle 的一项功能,它会延迟计算属性的值,直到需要它为止。这是为扩展和任务编写属性的推荐方法。

它提供的一些好处包括:

  • 解决配置顺序问题(不再需要 Project.afterEvaluate()
  • 自动跟踪依赖关系(无需 Task.dependsOn()
  • 提供标准化的访问方式...

    ❯ 阅读更多

介绍测试套件

随着项目规模和复杂性的增长,以及项目的成熟,它们往往会积累大量自动化测试。在多个粒度级别测试您的软件对于快速发现问题和提高开发人员效率至关重要。

在 2021 年 11 月发布的Gradle 7.3 中,Gradle 团队引入了一项名为声明式测试套件的新功能。使用此功能可以更轻松地在单个 Gradle JVM 项目中管理不同类型的测试,而无需担心底层的“管道”细节。

为什么要使用测试套件?

通常情况下 - 无论您是否严格遵循测试驱动开发 - 在开发项目时,您会不断地为生产类添加新的单元测试。按照惯例,对于 Java 项目,...

❯ 阅读更多

介绍 Java 工具链

构建 Java 项目和运行 Gradle 都需要安装 JDK。大多数 Gradle 用户方便地使用运行 Gradle 的 Java 安装来构建和测试他们的应用程序。

虽然这在简单情况下是可以接受的,但这种方法存在一些问题。例如,如果构建需要在所有机器上使用相同的 Java 版本,那么每个开发人员都需要了解该要求并手动安装该版本。

以前可以配置 Gradle 使用与运行 Gradle 的 Java 版本不同的 Java 版本来构建项目。但是,这需要分别配置每个任务,例如编译、测试和 javadoc。

Gradle 6.7 引入了“Java 工具链支持”。简而言之,...

❯ 阅读更多

介绍配置缓存

这是关于增量开发的一系列博文中的第二篇,增量开发是软件开发过程中频繁进行小改动的那一部分。我们将讨论即将推出的 Gradle 构建工具功能,这些功能将显著改善此用例的反馈时间。在上一篇博文中,我们 介绍了 Gradle 6.5 的文件系统监控

Gradle 6.6 中,我们引入了一个名为配置缓存的实验性功能,该功能通过缓存 配置阶段 的结果并将其重复用于后续构建来显著提高构建性能。使用配置缓存,当影响构建配置的内容(例如构建脚本)没有发生变化时,Gradle 可以完全跳过配置阶段。

...

❯ 阅读更多

介绍文件系统监控

这是关于增量开发的一系列博文中的第一篇,增量开发是软件开发过程中频繁进行小改动的那一部分。我们将讨论即将推出的 Gradle 构建工具功能,这些功能将显著改善此用例的反馈时间。

该博文在该功能在 Gradle 6.7 中成为生产就绪后已更新。

在 Gradle 6.5 中,我们引入了一个名为文件系统监控的实验性功能,该功能显著加速了 增量构建。启用后,它允许 Gradle 在构建之间将它从文件系统中学到的内容保存在内存中,而不是在每次构建时轮询文件系统。这显著减少了确定自上次构建以来发生了哪些变化所需的磁盘 I/O 量。...

❯ 阅读更多

更智能的依赖项降级

处理传递依赖项时最大的挑战之一是控制它们的版本。流行的库将在您的依赖项图中的多个位置显示为传递依赖项。并且很可能每个路径上的版本信息都不同。

通过 多篇博文,您已经了解到 Gradle 提供了丰富的功能集来表达复杂的依赖项要求。在这篇文章中,我们将讨论为什么语义在降级依赖项版本时很重要。您将了解 Gradle 6 的严格版本功能如何提供此语义信息,并为您提供一个强大而精确的工具来处理此复杂问题。

在这篇文章中,我们将使用 Google 的 Guava...

❯ 阅读更多

为什么像 Guava 这样的库需要比 POM 文件更多的东西

十多年前,Google 发布了一个新的 Java 集合库。这个库现在被称为 Google Guava,在接下来的几个月和几年里获得了很大的关注,并且可能是今天生产代码中使用最多的 Java 库。

由于 Guava 的广泛采用,今天许多其他库都依赖于它。很有可能你会在任何规模相当大的 Java 项目的类路径中找到它,即使它没有被直接使用。随着越来越多的代码依赖于这样一个广泛使用的库,冲突的可能性会增加,从而增加了项目的 依赖地狱

❯ 阅读更多

介绍易碎测试缓解工具

这篇文章介绍了一个 新的 Gradle 插件 和构建扫描改进,旨在缓解你的易碎测试。

易碎测试通过阻塞 CI 管道并导致不必要的故障调查来破坏软件开发周期。不健康的团队通过重新运行构建来维持,有时要运行多次才能使更改通过。Martin Fowler 对 非确定性测试 的话值得一读。

为了消除这种寄生虫,你必须识别、优先排序并修复你的易碎测试。

缓解易碎测试

有一些巧妙的启发式方法可以帮助识别易碎测试。你可以运行一些静态分析来证明测试失败理论上不可能导致给定的测试失败。你可以计算从失败到成功或从成功到失败的“翻转”次数...

❯ 阅读更多

可选依赖项并非可选

之前的博文 中,我们演示了如何使用 功能 来优雅地解决在类路径上拥有多个日志框架的问题。在这篇文章中,我们将在不同的上下文中再次使用这个概念:可选依赖项

在 Gradle,我们经常说没有可选依赖项:有一些依赖项是如果你使用特定功能需要的。让我们解释一下原因。

可选依赖项

直到最近,Gradle 还没有提供任何发布可选依赖项的方法,这令许多 Apache Maven™ 用户感到困惑。为了理解在什么情况下使用可选依赖项,让我们看一个真实世界的项目。 Apache PDFBox 库在其 ❯ 阅读更多

使用功能解决 Java 日志生态系统的复杂性

Gradle 6.0 在依赖管理方面进行了一些改进,我们将在 一系列 博客文章 中介绍。在这篇文章中,我们将探讨通过功能的概念来检测类路径上不兼容的依赖项。

为了说明这个概念,我们将看看 Java 应用程序和库的日志记录状态。除了 Java 核心库提供 java.util.logging (JUL) 之外,开发人员还可以使用许多日志记录库,例如

❯ 阅读更多

使用平台和 Gradle 模块元数据自动对齐依赖项

这篇文章已更新,以反映 Jackson 从 2.12.0 版本开始使用本文中的建议发布 Gradle 模块元数据。

在关于 Gradle 6 依赖管理的 上一篇文章 中,我们看到不断增长的构建很快就会陷入依赖地狱。如果意外结果是在依赖关系图的底部引入并通过传递依赖关系向上传播,那么它们将特别难以分析。不幸的是,如果库的作者(构成依赖关系图的底部)有办法在库的元数据中表达有关这些库版本的所有知识,那么其中一些问题是可以避免的。

一个典型的例子是...

❯ 阅读更多

使用 Gradle 6 避免依赖地狱

依赖地狱是许多团队面临的一个大问题。项目及其依赖关系图越大,维护起来就越困难。现有依赖管理工具提供的解决方案不足以有效地解决这个问题。

Gradle 6 旨在提供可操作的工具来帮助解决这些问题,使依赖管理更易于维护和可靠。

例如,这是来自真实世界项目的匿名依赖关系图

A large dependency graph

此图中包含数百个不同的库。有些是内部库,有些是 OSS 库。其中一部分模块每周都会发布多个版本。实际上,对于如此庞大的图,您不可能...

❯ 阅读更多

Swift 插件介绍

这篇文章介绍了一些我们一直在开发的新原生插件,它们可以构建 Swift 库和应用程序。它们在 macOS 和 Linux 上都与 官方 Swift 编译器 一起使用。

这些插件利用了 Gradle 核心中的许多功能,例如丰富的依赖管理引擎以及 源依赖构建缓存复合构建更细粒度的并行执行构建扫描 等等。需要注意的是,这些插件不能直接用于构建 iOS 应用程序和库。

如果您想提供反馈,请 与我们联系

构建应用程序

您可以在 Gradle 原生示例 GitHub 存储库中找到本文中的所有示例。让我们看看如何构建一个 简单的应用程序

❯ 阅读更多

关于新的 C++ 插件的更新

随着新的 C++ 插件越来越受到早期采用者的关注,我们想更新每个人关于自我们之前发布的 介绍新的 C++ 插件 文章以来的进展。

在过去的几个月里,我们看到了几个新功能、新的和扩展的文档以及 IDE 支持的改进。

如果您想提供反馈,请 与我们联系

新功能

自上次博客文章发布以来,我们引入了三个主要的新功能:C++ 项目的入门模板、目标机器建模和源依赖。

C++ 项目的入门模板

现在开始一个新的 C++ 项目比以往更容易。

感谢 init 任务添加到构建初始化插件 的 C++ 入门模板,您可以...

❯ 阅读更多

Buildship 中的自动任务执行

如果您使用 Eclipse,您可能熟悉 Buildship,它是 Eclipse 的 Gradle 插件。Buildship 3.1 版本允许您 在项目同步时运行任务自动构建,这是 Github 上两个投票率最高的 issue。在这篇文章中,我们将总结为什么这对许多人来说是一个必不可少的特性,以及如何使用它。

扩展项目同步

Buildship 项目同步功能将 Gradle 项目导入工作区并配置它们以使用 Java 工具链。当然,这只是冰山一角。还有许多其他工具和框架,Buildship 无法为所有框架提供配置。从 3.0 版本开始,有一个 ❯ 阅读更多

介绍 Gradle 模块元数据

Gradle 模块元数据在 Gradle 5.3 中达到 1.0 版本,在这里我们将解释为什么您应该像我们一样兴奋!

Gradle 模块元数据是为了解决困扰依赖管理多年的许多问题而创建的,特别是,但不仅限于 Java 生态系统。它尤其重要,因为 POM 文件(或 Ivy 文件)不足以描述当今软件的现实,在当今软件中,您可能需要区分不同平台的二进制文件,或者在多个可用时选择 API 的特定实现。

我们将在本文后面介绍更多示例。一些问题可能存在解决方法,但这些解决方法可能是笨拙的,甚至容易出错。例如,...

❯ 阅读更多

Gradle Kotlin DSL 1.0

最近发布的 Gradle 5.0 包含 Gradle Kotlin DSL v1.0,现在已准备好广泛使用。

我们希望您在 Intellij IDEA 和 Android Studio 中享受构建创作体验,并利用 Kotlin 静态类型系统提供的优势:自动完成、智能内容辅助、快速访问文档、导航到源代码和上下文感知重构。

如果您错过了,您可以观看 Paul Merlin 在 使用 Gradle Kotlin DSL 的类型安全构建逻辑 视频中演示这些优势,该视频来自 KotlinConf 2018。

如果您更喜欢 Groovy 的灵活性和动态特性,那完全没问题——Groovy DSL 不会被弃用。使用...

❯ 阅读更多

介绍源依赖项

这篇文章介绍了一种新的 Gradle 依赖项管理功能,称为“源依赖项”。

通常,当您声明对库的依赖项时,Gradle 会在二进制存储库(如 JCenter 或 Maven Central)中查找库的二进制文件,并下载这些二进制文件以供构建使用。

源依赖项允许您让 Gradle 自动从 Git 中检出库的源代码,并在您的机器上本地构建二进制文件,而不是下载它们。

我们很乐意收到您对该功能的反馈。请试用它,并告诉我们哪些对您有用,以及您遇到的任何问题。您可以在 Gradle 论坛 上留下反馈,或在 Gradle native GitHub 存储库中提出问题。

...

❯ 阅读更多

准备迎接 Kotlin DSL 1.0

Gradle Kotlin DSL 1.0 发布候选版本 已普遍可用,包含在 Gradle 4.10 中。Kotlin DSL 几乎已准备好广泛使用。

我们希望您享受构建创作体验,并利用 Kotlin 静态类型系统带来的好处:上下文感知重构、智能内容辅助、可调试构建脚本以及快速访问文档。如果您还没有看到,您可以观看 Rodrigo B. de Oliveira 在 这个 KotlinConf 2017 视频 中演示这些好处。

Kotlin DSL 1.0 正式版将与 Gradle 5.0 一起发布,这是下一个版本的 Gradle。在 1.0 版本之后,Kotlin DSL 不会在没有弃用周期的情况下引入任何重大更改。

请试用 Kotlin DSL 并提交反馈。有关如何执行此操作的指南...

❯ 阅读更多

改进 Gradle API 以减少配置时间

这篇文章介绍了一种新的 API,用于在构建脚本和插件中声明和配置 Gradle 任务。我们希望这个新的 API 最终能够取代现有的 API,因为它允许 Gradle 避免配置不必要的构建逻辑。使用新 API 将很快成为默认建议,但现有 API 将通过我们通常的弃用过程在几个主要版本中进行。

我们正在邀请早期用户试用新的 Gradle 任务 API,以解决任何问题并收集反馈。我们创建了一个新的用户手册章节,以快速介绍该功能并解释将您的构建迁移到使用新 API 的一些指南。

我们欢迎您可能提供的任何反馈...

❯ 阅读更多

介绍新的 C++ 插件

这篇文章介绍了我们一直在开发的一些新的 C++ 插件。这些插件可以构建 C++ 库和应用程序。它们在 macOS、Linux 和 Windows 上使用 GCC、Clang 和 Visual C++/Visual Studio 工作。

这些插件最终将取代软件模型插件,并利用 Gradle 核心中的许多新功能,例如丰富的依赖管理引擎、构建缓存复合构建更细粒度的并行执行构建扫描 等等。有关背景信息,请参阅我们关于Gradle 软件模型的状态和未来的文章。

我们欢迎您对这些插件的任何反馈。您可以在Gradle 论坛 上留下反馈,或在Gradle 原生 GitHub 存储库中提出问题。

构建应用程序

您可以在Gradle 原生示例 GitHub 存储库中找到本文中的所有示例。让我们看看如何构建一个简单的应用程序

❯ 阅读更多

Gradle 软件模型的状态和未来

我们收到了许多关于Gradle 软件模型 的状态和方向的询问,尤其是来自构建原生库和应用程序的用户。

在这篇博文中,我们将解释软件模型的当前状态和未来,特别是它与 Gradle 的原生开发的关系。2017 年剩余时间计划了许多令人兴奋的改进;请参阅下面的路线图

软件模型的现状

简而言之,软件模型是一种非常声明性的方式来描述软件的构建方式以及在该过程中需要的其他组件作为依赖项。它还提供了一个新的基于规则的引擎来配置 Gradle 构建。当我们开始实施软件模型时,我们给自己设定了以下目标

❯ 阅读更多

闪电般的快速 Android 构建

今天在 Google I/O 大会上,Android Studio 团队发布了基于 Gradle 4.0 M2Android Gradle 插件 3.0 的第一个预览版本。它带来了重大的性能改进,特别是对于具有大量子项目的构建。在这篇博文中,我们将解释您对这个预览版本的期待以及 Android Studio 和 Gradle 团队如何实现这些改进。在深入探讨之前,让我们回顾一下导致创建当前 Android 构建系统的目标。

移动开发的复杂性

开发移动应用程序本质上比构建类似规模的传统 Web 或服务器应用程序更复杂。一个应用程序需要支持各种具有不同外设、不同屏幕尺寸和相对较慢的硬件的设备。流行的免费增值模式增加了另一层多样性,需要为应用程序的免费版和付费版提供不同的代码路径。为了为每台设备和目标受众提供快速、精简的应用程序,构建系统需要在前端进行大量繁重的工作。

为了提高开发人员的生产力并减少运行时开销,Android 构建工具提供了多种语言和源代码生成器,例如 Java、RenderScript、AIDL 和原生代码。将应用程序与其库打包在一起涉及高度可定制的合并和缩减步骤。Android Studio 团队面临着自动执行所有这些操作而不会向开发人员暴露底层复杂性的挑战。开发人员可以专注于编写他们的生产代码。

❯ 阅读更多

介绍 Gradle 构建缓存 Beta 版

Gradle 3.5 中引入,以减少构建时间。

它有什么作用?

构建缓存在本地重用 Gradle 任务的输出,并在机器之间共享任务输出。在许多情况下,这将加快平均构建时间。

构建缓存是对 Gradle 增量构建功能的补充,增量构建功能优化了尚未构建的本地更改的构建性能。许多 Gradle 任务被设计为 增量 的,因此如果任务的输入和输出没有改变,Gradle 可以跳过该任务。即使任务的输入发生了变化,某些任务 也可以只重建已更改的部分。当然,这些技术只有在以前本地构建中已经存在输出的情况下才能起作用。过去,在新的检出上构建或执行“clean”构建需要从头开始构建所有内容,即使这些构建的结果已经在本地或另一台机器(例如持续集成服务器)上创建。

现在,Gradle 使用任务的输入作为键来唯一标识任务的输出。启用构建缓存功能后,如果 Gradle 可以在构建缓存中找到该键,Gradle 将跳过任务执行,并直接将输出从缓存复制到构建目录。这比再次执行任务快得多。

❯ 阅读更多

宣布 Gradle Enterprise 2017.1

我们很高兴地宣布 Gradle Enterprise 2017.1 发布。此版本包含许多新功能和错误修复,进一步扩展了构建扫描为您和您的团队提供的构建洞察力。以下是此版本的一些亮点。如果您有兴趣进行演示或试用,请联系我们

轻松查找两个构建之间的依赖项更改

构建之间的依赖项更改可能是问题的常见来源。例如,升级一个库的版本可能会无意中将不同版本的传递依赖项引入您的项目。反过来,这些较新的版本可能会通过破坏与项目使用的其他库的兼容性而给您带来各种挫折。

新的构建比较功能允许您快速查找构建之间的依赖项更改,包括传递依赖项的差异。

❯ 阅读更多

Gradle 3.4 中的增量编译、Java 库插件和其他性能功能

我们非常自豪地宣布,新发布的 Gradle 3.4 显著改进了对构建 Java 应用程序的支持,适用于所有类型的用户。这篇文章详细解释了我们修复、改进和添加的内容。我们将特别关注

  • 极快的增量构建
  • 可怕的编译类路径泄漏的终结

我们所做的改进可以极大地缩短您的构建时间。以下是我们的测量结果

基准测试是公开的,您可以自己尝试,它们是代表我们消费者报告的现实世界问题的合成项目。特别是,在持续开发过程中重要的是增量(进行小的更改不应该导致长时间的构建)

❯ 阅读更多

宣布 Buildship 2.0

我们很高兴地宣布 Buildship 的 2.0 版本——我们为 Eclipse 提供的官方 Gradle 支持——现在可以通过 Eclipse Marketplace 获得。此版本添加了 **对复合构建的支持**,极大地减少了开发周转时间。**UI 已经根据 1.x 版本期间大量社区反馈进行了重新设计。** **项目同步现在更加准确**,**项目导入只需要少一步**。我们添加了 **对 Gradle 离线模式的支持**(感谢 Rodrigue!),最后但并非最不重要的一点是,第三方集成者可以利用我们的 **新的 InvocationCustomizer 扩展点**。继续阅读以了解有关这些新功能的详细信息。

复合构建支持

什么是复合构建?

Gradle 中的 复合构建 功能允许您将多个独立的 Gradle 构建视为一个大型多项目构建。当您需要处理通常单独开发的多个项目时,这会极大地缩短周转时间。

假设您编写了一个 Java 库 lib,它被您的许多应用程序使用。您发现了一个错误,该错误只在 special-app 中出现。传统的开发工作流程是更改 lib 中的一些代码并将快照安装到本地存储库中。然后,您需要更改 special-app 的构建脚本以使用该新快照,并检查错误是否已修复。

❯ 阅读更多

构建扫描中的自定义数据

构建扫描是轻松共享有关构建数据的绝佳方式,但如果您的团队想要将自己的数据添加到这些构建扫描中怎么办?他们可以!除了在构建扫描中自动捕获的广泛信息外,您还可以附加自己的自定义数据,以提供对构建的更深入见解。此自定义数据可以采用标签、链接和键值格式的任意自定义值的格式。

通过在构建扫描中添加自定义数据,您可以轻松找到特定类型的构建,提供指向 GitHub 上相关源代码提交的快速链接,添加有用的 CI 构建信息等等。然后,当您与队友共享单个构建扫描链接时,他们可以快速轻松地访问有关您的构建的大量信息,使他们更容易诊断构建环境问题,修复测试失败等等。

如果您不熟悉构建扫描,您可以在我们的 关于该主题的介绍性博客文章 中了解它们。您还可以在 构建扫描用户手册 中找到更多详细信息,探索一些示例构建扫描尝试使用此示例构建扫描项目

现在让我们来看一些将自定义数据添加到构建扫描中的示例(有关 其他示例,请参阅用户手册)。

❯ 阅读更多

介绍复合构建

我们并不总是能够宣布一项功能,它会彻底改变多种软件工程工作流程,但今天就是这一天。复合构建 是 Gradle 3.1 中的一项新功能,它为项目组织带来了全新的维度。

复合构建是一种将多个独立的 Gradle 构建合并在一起并一起构建 的方法。该语句的简洁性并不能完全传达所有新的可能性,所以让我向您展示这将如何让您作为开发人员的生活变得更加轻松。

加入项目

许多组织将他们的代码库拆分为多个独立的项目,每个项目都有一个专用的存储库和发布周期。项目之间的集成使用二进制依赖项进行管理,例如发布到二进制的 JAR 文件...

❯ 阅读更多

介绍构建扫描

几个月前,在今年的 Gradle 峰会上,我们宣布了 Gradle 平台的一个新部分,名为 Gradle 云服务。在这篇文章中,我想向您介绍这些服务中的第一个——Gradle 构建扫描服务——以及它所支持的构建扫描

什么是构建扫描?

构建扫描是您运行构建时捕获的数据的表示。 构建扫描插件 负责捕获数据并将其发送到构建扫描服务。然后,该服务将数据转换为您可以使用并与他人共享的信息。以下是一个使用构建扫描来调查故障的快速示例

Publishing and Viewing a Build Scan

❯ 阅读更多

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

Gradle 3.0 的第二个里程碑版本 刚刚发布,此版本提供了对 Java 9 的初始支持!

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

❯ 阅读更多

Kotlin 与 Gradle 相遇

许多读者会熟悉 JetBrains 出色的 Kotlin 编程语言。它自 2010 年开始开发,于 2012 年首次公开发布,并在今年早些时候发布了 1.0 GA 版本。

多年来,我们一直在关注 Kotlin,并且越来越 impressed 于该语言提供的功能以及它在 Android 社区中的广泛采用。

去年年底,Hans 与 JetBrains 团队的几个人坐在一起,他们一起思考:使用基于 Kotlin 的方法来编写 Gradle 构建脚本和插件会是什么样子?它如何帮助团队(尤其是大型团队)更快地工作,并编写结构更好、更易于维护的构建?

可能性令人着迷。

❯ 阅读更多

性能是一项功能

在 Gradle Inc.,我们非常重视构建性能。虽然我们在每个 Gradle 版本中都包含了性能改进,但我们从 Gradle 2.13 开始启动了一项名为“性能爆发”的集中努力,旨在使所有用户的软件构建更快、更愉快。在这篇博文中,我们将探讨我们如何处理性能问题,以及在2.13 版本及更高版本中可以期待的改进。

最快的做法是什么都不做

构建软件需要时间,这就是为什么最大的性能改进是完全省略构建步骤的原因。这就是为什么与 Maven 或 Ant 等传统构建工具不同,Gradle 侧重于增量构建。为什么要运行clean,当...

❯ 阅读更多

介绍编译时依赖

Gradle 2.12 中最受期待的功能之一刚刚发布:支持声明编译时依赖。对于熟悉 Maven 的 Java 开发人员来说,编译时依赖的功能类似于 Maven 的provided 范围,允许您声明仅在编译时使用的非传递依赖项。虽然 Gradle War 插件的用户可以使用类似的功能,但现在可以使用 Java 插件为所有 Java 项目声明编译时依赖项。

编译时依赖项解决了多个用例,包括

  • 编译时需要但在运行时不需要的依赖项,例如仅源代码注释或注释处理器;
  • 编译时需要但在运行时仅在使用某些功能时需要的依赖项,也称为可选依赖项
  • 依赖项的API...

    ❯ 阅读更多

介绍 TestKit:用于功能测试 Gradle 构建逻辑的工具包

自动化测试是实现软件开发实践(如重构、持续集成和交付)的必要先决条件。虽然为应用程序代码编写单元测试、集成测试和功能测试已成为行业规范,但可以公平地说,构建自动化领域的测试尚未成为主流。

但是,为什么我们没有将相同的测试实践应用于构建逻辑?最终,构建逻辑与应用程序代码一样重要。它帮助我们以自动化、可重复和可靠的方式向客户交付生产软件。可能有很多理由跳过测试;但是,其中一个突出的原因是用于制定构建逻辑的数据定义格式。在...

❯ 阅读更多

Buildship:从起源到包含在 Eclipse 中

在 Gradle,我们相信维护开发者的“心流状态”对于构建优质软件至关重要。因为我们相信心流至关重要,所以我们认为开发者不应该离开 IDE 来构建,也不应该需要知道 IDE 执行哪些功能以及哪些功能委托给了构建系统。我们也希望所有构建逻辑都保留在构建系统中,因此所有用于计算项目配置、构建项目、运行测试和运行可执行文件的操作都由 IDE 委托给构建系统。因此,IDE 映射构建的项目,可视化构建模型,并显示进度...

❯ 阅读更多

介绍持续构建执行

优化构建-编辑-构建循环

过去,我们建议您启用 Gradle 守护进程(以及 并行执行,有一些注意事项)以获得 Gradle 的最佳性能。我们还讨论了使用 增量构建 通过跳过不必要的操作来加速您的构建-编辑-构建反馈循环。现在,另一种优化方法可用——它可以让您置身事外,让 Gradle 为您启动构建。

从 2.5 版本开始,Gradle 支持持续构建执行,它会在检测到其输入发生更改时自动重新执行构建。有一些社区插件添加了对 Gradle “监视”模式 的支持,这些插件执行类似的操作。

对于 Maven,相同的监视功能需要为每个插件实现...

❯ 阅读更多

介绍增量构建支持

任务输入、输出和依赖项

内置任务,例如 JavaCompile 声明一组输入(Java 源文件)和一组输出(类文件)。Gradle 使用此信息来确定任务是否是最新的,是否需要执行任何操作。如果输入或输出都没有更改,Gradle 可以跳过该任务。总的来说,我们将这种行为称为 Gradle 的增量构建支持

要利用增量构建支持,您需要向 Gradle 提供有关任务输入和输出的信息。可以将任务配置为仅具有输出。在执行任务之前,Gradle 会检查输出,如果输出没有更改,则会跳过任务的执行。在实际构建中,一个任务...

❯ 阅读更多

Gradle 对 Maven POM 配置文件的支持

Maven 配置文件 提供了在特定条件下自定义构建时元数据的能力,例如,如果设置了特定系统属性。一个典型的用例是在不同的运行时环境(例如 Linux 与 Windows)中应用特定的配置。例如,正在构建的项目可能需要在这些不同的平台上使用不同的依赖项。

在 Gradle 项目中实现构建时配置文件

仔细想想,Maven 配置文件在逻辑上只不过是有限的 if 语句。Gradle 不需要为此专门构建结构。为什么呢?Gradle 使用编程语言而不是 XML 来定义构建模型。这使您能够使用编程语言中提供的全部表达能力来定义某些部分的条件...

❯ 阅读更多