Gradle 9.5.1 补丁发布:修复从 9.4.1 升级后的 OOM 问题

2026-05-14 13 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:6 分钟

Gradle 9.5.0 刚推出不久,9.5.1 就紧随而至——这不是常规迭代,而是针对一个让不少团队头疼的问题打补丁:从 9.4.1 升级到 9.5.0 后出现的 OOM(OutOfMemoryError)。如果你的项目在升级后构建时莫名崩溃,这个版本值得立刻关注。

OOM 问题到底出在哪

从摘要信息看,9.5.0 引入的变更导致部分从 9.4.1 升级的项目在构建过程中触发内存溢出。这类问题通常出现在以下场景:

  • 大型多模块项目——模块数量多、依赖图复杂,Gradle 在解析依赖或执行任务时内存消耗陡增。
  • 配置阶段内存不足——build.gradle 中大量自定义逻辑或插件在配置期就占满了堆内存。
  • Gradle Daemon 进程被杀——Daemon 默认堆上限有限,遇到内存暴涨时直接 OOM 退出,构建中断。

补丁版本 9.5.1 针对这一回归问题做了修复,意味着升级路径从 9.4.1 → 9.5.0 的阻塞点被打通了。

升级前先确认你的现状

在动手升级之前,先搞清楚当前项目的 Gradle 版本和 Daemon 内存配置:

# 查看当前 Gradle 版本
gradle --version

# 查看 Daemon 状态和内存使用
gradle --status

# 如果之前升级到 9.5.0 后出现 OOM,先停掉所有 Daemon
gradle --stop

如果之前 9.5.0 构建时出现过类似 java.lang.OutOfMemoryError: Java heap space 的错误日志,9.5.1 大概率能解决。但即便如此,合理配置 Daemon 内存仍然是必要保障。

实践:升级到 9.5.1 并调优内存

第一步:更新 Gradle Wrapper

大多数项目通过 Wrapper 管理 Gradle 版本,这是最安全的升级方式:

# 升级 Wrapper 到 9.5.1
gradle wrapper --gradle-version 9.5.1

执行后 gradle/wrapper/gradle-wrapper.properties 会自动更新:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

之后所有开发者执行 ./gradlew 就会自动下载 9.5.1。

第二步:给 Daemon 分配足够内存

OOM 问题虽然被修复,但大型项目仍需要合理的内存上限。在 gradle.properties 中配置:

# gradle.properties — 项目根目录或 ~/.gradle/ 下

# Daemon 最大堆内存,大型项目建议 2G 以上
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError

# 开启并行构建,多模块项目效果明显
org.gradle.parallel=true

# 按需配置,跳过不需要的模块
org.gradle.configuration-cache=true

-XX:+HeapDumpOnOutOfMemoryError 这个参数很实用——万一还是 OOM,它会自动生成堆转储文件,方便用 VisualVM 或 MAT 分析到底是哪段代码在吃内存。

第三步:一个最小可运行的多模块示例

下面是一个可以直接跑起来的多模块项目结构,用来验证 9.5.1 是否正常工作:

// settings.gradle
rootProject.name = 'gradle-951-demo'
include 'app', 'lib'
// build.gradle(根项目)
plugins {
    id 'java' apply false
}

subprojects {
    apply plugin: 'java'
    repositories {
        mavenCentral()
    }
    java {
        toolchain {
            languageVersion = JavaLanguageVersion.of(17)
        }
    }
}
// lib/build.gradle
plugins {
    id 'java-library'
}

dependencies {
    implementation 'org.apache.commons:commons-lang3:3.14.0'
}
// app/build.gradle
plugins {
    id 'java'
    id 'application'
}

application {
    mainClass = 'com.demo.Main'
}

dependencies {
    implementation project(':lib')
}
// app/src/main/java/com/demo/Main.java
package com.demo;

import org.apache.commons.lang3.StringUtils;

public class Main {
    public static void main(String[] args) {
        System.out.println(StringUtils.capitalize("gradle 9.5.1 works!"));
    }
}

验证构建:

# 清理 + 构建 + 运行
./gradlew clean build run

# 预期输出:Gradle 9.5.1 works!

如果构建顺利完成没有 OOM,说明补丁生效。

升级建议与注意事项

  • 不要跳过 Wrapper 升级——直接改 distributionUrl 也能生效,但 gradle wrapper 命令会同步更新 Wrapper 脚本本身,避免旧脚本与新版本不兼容。
  • 先在 CI 上试跑——本地验证通过后,在 CI 环境跑一次完整构建。CI 机器内存通常比开发机更紧张,更容易暴露问题。
  • 保留 --stacktrace 习惯——如果构建仍然失败,用 ./gradlew build --stacktrace 获取完整调用栈,确认是否还是 OOM 还是其他问题。
  • 清理旧 Daemon 缓存——升级版本后旧 Daemon 可能残留,gradle --stop 之后再构建,确保新版本 Daemon 启动。
  • 关注后续补丁——9.5.1 是第一个补丁,如果社区反馈还有其他回归问题,9.5.2 可能很快跟进。锁定 Wrapper 版本可以随时一键升级。

Gradle 的补丁版本通常只修特定问题,不引入新特性,风险低。如果你正卡在 9.4.1 → 9.5.0 的 OOM 上,9.5.1 就是那个解锁键。


相关推荐