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

Github Action gradle缓存异常恢复 hash变更后未按预期失效问题

问题原因解答

1. 哈希变更后缓存仍被恢复的原因

你配置的actions/cache存在restore-keys规则,该规则的作用是当精确的key未命中时,会按前缀模糊匹配历史缓存:

  • 你设置的restore-keys为${{ runner.os }}-gradle-,只要是同操作系统下前缀匹配的gradle历史缓存,都会被恢复到当前构建环境中
  • 你看到的下载日志就是模糊匹配命中旧缓存的结果,即使精确的带文件哈希的key没有命中,旧缓存依然会被拉取。唯一的区别是如果精确key不匹配,本次构建结束后不会更新该缓存条目。

2. Gradle构建缓存未失效的原因

你恢复的旧缓存中包含了Gradle本地构建缓存(~/.gradle/caches下的任务状态缓存),Gradle任务是否重跑取决于任务输入输出的哈希校验结果,出现未重跑的情况通常有两个原因:

  • 你新增的校验逻辑所属的任务,没有正确声明输入项:比如测试用例检查逻辑如果没有将项目测试源目录、校验规则参数等声明为任务输入,Gradle会认为该任务输入无变更,直接复用历史缓存的UP-TO-DATE状态,不会重新执行。
  • buildSrc目录下的代码变更未被纳入任务输入追踪:如果你的插件逻辑放在buildSrc中,低版本Gradle不会自动将buildSrc的代码变更关联到所有应用该插件的任务输入上,导致任务感知不到逻辑变更,直接复用缓存。
解决建议
  • 如果你不需要模糊匹配旧缓存,可以直接删除restore-keys配置项,这样只有文件哈希完全匹配的精确缓存才会被恢复。
  • 检查校验任务的输入输出声明,确保所有影响任务执行结果的变量、文件都被声明为任务输入,所有生成的产物被声明为任务输出,Gradle就能自动感知变更重跑任务。
  • 若需要在buildSrc变更后强制全量重跑任务,可以在Gradle构建命令中添加--rerun-tasks参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:45:03