Gradle 8.0 发布


Gradle 8.0 现已发布。Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建工具,支持依赖管理和多项目,类似 Maven,但比之简单轻便。它使用一种基于 Groovy 的特定领域语言来声明项目设置,而不是传统的 XML。

此版本包括对 Kotlin DSL 的一些改进;包括为声明式插件跳过 Kotlin 编译器的解释器,和升级到 Kotlin API level 1.8。以及有关 buildSrc 构建的一些改进,比如直接运行 buildSrc 任务、跳过测试、用 buildSrc 来 including 其他构建等。

还增强了配置缓存;包括通过从缓存条目加载任务并在第一次构建时隔离运行任务来实现更细粒度的并行性。此外,Gradle 8.0 还修复了一些错误,删除了弃用的功能,并进行了其他一般性改进。

Kotlin DSL

Gradle 的 Kotlin DSL 提供了传统 Groovy DSL 的替代语法,在支持的 IDE 中具有增强的编辑体验,具有卓越的内容帮助、重构、文档等功能。

改进的脚本编译性能

Gradle 8.0 为 .gradle.kts 脚本中的声明性插件 {} 块引入了一个解释器,使整体构建时间缩短了 20% 左右。默认情况下避免为声明性 plugins {} 块调用 Kotlin 编译器。

要利用此性能,用户需确保在声明性 plugins {} 块中使用受支持的格式,例如:

plugins {
id("java-library")// <1>
id("com.acme.example") version "1.0" apply false// <2>
kotlin("jvm") version "1.7.21"// <3>
}
  1. 插件标识符字符串的插件规范
  2. 带有版本和/或插件应用程序标志的插件规范
  3. Kotlin 插件规范助手

将 Kotlin DSL 更新为 Kotlin API level 1.8

以前,Kotlin DSL 使用 Kotlin API level 1.4。从 Gradle 8.0 开始,Kotlin DSL 使用 Kotlin API level 1.8。此更改带来了自 Kotlin 1.4.0 以来对 Kotlin 语言和标准库所做的所有改进。更多详细信息可访问 upgrading guide。

增强脚本编译以使用 Gradle JVM 作为 Kotlin JVM target

以前, .gradle.kts 脚本的编译始终使用 Java 8 作为 Kotlin JVM target。从 Gradle 8.0 开始,则使用运行构建的 JVM 版本。如果你的团队使用 Java 11 来运行 Gradle,这将允许你在构建脚本中使用 Java 11 库和语言功能。

值得注意的是,这不适用于预编译脚本插件。

预编译脚本插件现在使用配置的 Java 工具链

以前,预编译脚本插件的编译使用在 kotlinDslPluginOptions.jvmTarget 上配置的 JVM target。从 Gradle 8.0 开始,它现在使用配置的 Java 工具链,如果没有配置,则使用 Java 8。

更多详情可参阅 migration guide。

buildSrc构建的改进

此版本包括对 buildSrc 构建的多项改进,使其表现得更像 included builds。Included builds 是另一种组织构建逻辑以分离项目配置的方法,以便更好地利用增量构建和任务缓存。

直接运行buildSrc任务

现在可以从命令行运行 buildSrc 构建的任务,使用与 included builds 的任务相同的语法。例如,你可以使用 gradle buildSrc:build  buildSrc 构建中运行 build 任务。

有关详细信息,可参阅 user manual。

buildSrc可以 includ 其他构建

buildSrc 构建现在可以通过在 buildSrc/settings.gradle.kts  buildSrc/settings.gradle中声明来 include 其他构建。这允许用户在仍然使用buildSrc的同时更好地组织其构建逻辑。

有关详细信息,可参阅 user manual。

buildSrc 的测试不再自动运行

当 Gradle 构建 buildSrc 的输出时,它只运行产生该输出的任务。它不再运行 build 任务。特别是,这意味着 buildSrc 及其子项目的测试在不需要时不会构建和执行。

你可以按照与其他项目相同的方式为buildSrc运行测试,如上所述。

Init scripts 被应用于 buildSrc

除了 main build 和所有 included builds 之外,在命令行上使用--init-script指定的 init scripts 现在会应用于 buildSrc 

有关详细信息,可参阅 user manual。

Configuration cache 配置缓存

配置缓存通过缓存配置阶段的结果并将其重新用于后续构建来缩短构建时间。这是一个可以显着提高构建性能的孵化功能。

改进了首次运行时的并行配置缓存

配置缓存现在支持比使用并行执行更细粒度的并行性。从 Gradle 8.0 开始,使用配置缓存时任务从第一次构建开始并行运行。

Gradle 在重用配置缓存条目时始终并行运行任务。默认情况下,所有任务都并行运行,即使是同一项目中的任务,也要遵守依赖性约束。现在,它在存储缓存条目时也会这样做。

当启用配置缓存并且 Gradle 能够为当前构建找到兼容的缓存条目时,它将从缓存中加载任务并独立运行它们。如果 Gradle 找不到合适的缓存条目,它将运行配置阶段来确定必要的任务,将它们存储在新的缓存条目中,然后立即根据保存的状态运行构建。

有关详细信息,可参阅 user manual。

改进了与核心插件的兼容性

gradle init 命令可以与启用的配置缓存一起使用。

ANTLR 插件和 Groovy DSL 预编译脚本现在与配置缓存兼容。

所有核心 Gradle 插件的配置缓存支持的当前状态可以在配置缓存文档中找到。

Java 工具链改进

更新的工具链下载存储库

Gradle 7.6 引入了工具链存储库以提高灵活性。在 Gradle 8.0 中,不再有默认的 toolchain provisioner。用户必须明确声明至少一个 Java 工具链存储库。这可以通过工具链存储库插件来完成,例如 Foojay 工具链插件:

plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version("0.4.0")
}

有关详细信息,可参阅 user manual

一般性改进

改进了 Gradle 用户主页缓存清理

以前,Gradle 用户主目录中缓存的清理使用固定保留期(30 天或 7 天,具体取决于缓存)。这些保留期现在可以通过 Gradle 用户主页中的 init script 中的设置对象进行配置。

beforeSettings { settings ->
settings.caches {
downloadedResources.removeUnusedEntriesAfterDays = 45
}
}

此外,以前只能通过 Gradle 用户主页中的 org.gradle.cache.cleanup Gradle 属性部分禁用缓存清理。禁用缓存清理现在会影响 Gradle 用户主目录下的更多缓存,也可以通过 Gradle 用户主目录中的 init script 中的设置对象进行配置。

有关详细信息,可参阅 user manual。

增强的警告模式all  fail 现在更加详细

在 Gradle 8.0 之前,应该 print 所有警告的警告模式只为每个特定的警告消息 print 一个。这导致了一些警告信息的丢失。例如,如果有两个具有相同信息的警告,但源自构建过程的不同步骤(即不同的堆栈跟踪),则只 print 一个。

现在会为消息和堆栈跟踪的每种组合print 一个。这样的结果更加冗长,但也更加完整。

有关详细信息,可参阅 user manual。

此外,Gradle 8.0 还包括代码质量插件方面的一些改进、修复了 208 个 bug 等内容,更多详情可查看官方公告。


相關推薦

2023-04-15

化的可配置构建和运行 对 SDK 扩展的 Lint 支持 Android Gradle Plugin 8.0 的破坏性变化 Inspect 升级 App Quality Insights Network Inspector 支持流量拦截 支持在 Layout Inspector 中自动连接到前台进程 详情查看发布公告。

2023-12-01

Gradle 8.5 现已发布。Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建工具,支持依赖管理和多项目,类似 Maven,但比之简单轻便。它使用一种基于 Groovy 的特定领域语言来声明项目

2024-02-06

Gradle 8.6 现已发布。Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建工具,支持依赖管理和多项目,类似 Maven,但比之简单轻便。它使用一种基于 Groovy 的特定领域语言来声明项目

2023-08-04

大的变化和修改,代码进行了重构。MySQL 8.0 在 2016-09-12 发布, 重写了 5.7 中解析器的近 50% 的代码。MySQL 将编程语言都统一到 C++,编译器使用最新版本,代码风格采用 Google C++ Style,统一了 300 人的开发团队的代码标准。 目前 M

2022-11-27

Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建工具,支持依赖管理和多项目,类似 Maven,但比之简单轻便。它使用一种基于 Groovy 的特定领域语言来声明项目设置,而不是传统的 XML。 Gradle 7.6 现已发布,此版本

2022-08-07

Gradle 7.5.1 现已发布。Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建工具,支持依赖管理和多项目,类似 Maven,但比之简单轻便。它使用一种基于 Groovy 的特定领域语言来声明项目设

2023-04-19

平台独占的游戏也能在 Linux 操作系统上运行。 Valve 近日发布了 Proton 8.0,新版本最值得注意的是增加了对 18 款游戏的支持,除此之外还有包括改进多点触控支持在内的一系列改进和修复。 游戏 Proton 8.0 带来了对许多 Windows 游

2022-12-13

业的需求,使他们能够快速、有效、轻松地开发产品。 Gradle 在 Gradle 中初步实现(实验性的)Dependency API 将 Grade Editor 相关功能重构为 gradle.editor 模块 Gradle 隐藏空的生成文件夹 支持没有 build.gradle 的项目 修复 gradle bui

2023-04-21

QEMU 8.0 稳定版已正式发布,据称共有 238 名贡献者为此版本提交了超过 2800 个 commit。 值得关注的变化 当在 Linux 5.12 或更高版本的内核上运行时,QEMU 8.0 在使用 KVM 的情况下支持 Xen guests 弃用面向 32 位 x86 主机的系统

2023-04-22

序。目前 Wine 8.0.1 已作为 1 月的 Wine 8.0 版本的修复版本发布,包含一些翻译更新和错误修复。 此版本中有 36 个已知错误修复,主要包括: 修复了 Apple Silicon 上的 macOS 13.3 支持 解决了一些 VBScript 问题 解决了 Nethack 崩溃

2023-08-23

ApiCat v2.8.0 已经发布,基于 AI 技术的 API 开发工具。 此版本更新内容包括: 功能 增加了迭代功能,来为每个开发迭代计划 API,使工作更加清晰 增加了通过 Azure 调用 OpenAI Bug 修复 修复了一些 Bug 详情查看:https://gi

2023-10-11

开源数字音频工作站 Ardour 8.0 已正式发布。 Ardour 是开源的数字音频工作站软件,支持 Linux、macOS 和 Windows 系统。你可以使用它来录制、编辑和混合多轨音频,或者只是尝试新的想法、音乐和声音。 Ardour 的功能包括:多通

2024-03-16

京墨 v1.8.0 已经发布,古诗词文 APP 此版本更新内容包括: 更新日志 优化诗文同步,实现“续传”功能; 优化诗文搜索查询; 添加诗文注释赏析; 添加【诗文】、【诗文名句】、【成语】小组件; 修复暗黑模式下应

2022-12-11

Wine 8.0 的第一个候选版本已发布,这标志着年度代码冻结期的开始,此版本中的新功能: 捆绑的 vkd3d 升级到 1.6 版。 Vulkan 和 OpenGL thunking 优化。 对打印处理器的更多支持。 改进的操纵杆控制面板。 Long 类型的 printf 格