You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行gradlew build后CI构建卡住,终止Gradle进程可恢复

Gradle 7.6构建完成后CI无限卡住,需手动终止进程才能结束

问题场景

CI环境执行gradlew build命令时,构建逻辑已成功完成(调试日志显示Gradle Daemon已结束构建),但构建进程会无限期卡住直至超时;手动终止GradleWrapperMain或GradleDaemon进程后,构建才会被标记为成功。当前使用环境:

  • Java 11.0.17
  • Spring Boot 2.x
  • Gradle Wrapper 7.6

该问题阻碍了向Java 11、Spring Boot 2.x和Gradle 7.6的迁移进程。

日志分析

从调试日志可见,构建在2023-06-28T11:38:17.365+0000已输出[DEBUG] [org.gradle.launcher.daemon.server.exec.ExecuteBuild] The daemon has finished executing the build.,确认构建逻辑执行完毕。但从11:38:23开始,进程每10秒重复执行以下锁操作,无退出逻辑:

2023-06-28T11:38:23.434+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
2023-06-28T11:38:23.434+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
2023-06-28T11:38:23.434+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.

这种循环导致CI进程挂起,无法正常退出。

解决方案建议

  • 禁用Gradle Daemon:CI环境下直接执行./gradlew build --no-daemon,绕过daemon机制,避免锁相关问题
  • 清理Gradle缓存:构建前添加步骤,删除项目根目录下的.gradle文件夹,以及CI用户的Gradle全局缓存目录(如~/.gradle/caches),排除缓存损坏引发的锁异常
  • 调整Daemon闲置超时:在项目gradle.properties中配置org.gradle.daemon.idletimeout=60000(1分钟),让daemon闲置后快速退出,减少锁持有时间
  • 检查CI权限:确保Jenkins(或CI执行用户)对项目目录、Gradle缓存目录拥有完整的读写权限,避免锁文件无法正常释放
  • 升级Gradle版本:尝试升级到Gradle 7.6.1或更高的7.x稳定版本,官方可能已修复该daemon锁循环的bug
  • 排查插件问题:临时禁用项目中的自定义Gradle插件或第三方插件,验证是否是插件未释放资源导致的进程挂起

内容的提问来源于stack exchange,提问作者pragyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 02:04:54