Gradle清理缓存报错:Failed to load compiled script from classpath
故障根因
手动删除$HOME/.gradle/caches/目录后触发该报错,本质是三类问题导致的:
- 运行中的Gradle守护进程持有旧缓存的文件句柄,缓存被删后进程引用失效
- 全局Gradle缓存被清空后,项目本地目录下残留的脚本编译缓存、构建缓存和全局状态不匹配,出现损坏的类文件引用
- 手动删缓存时因为权限问题导致目录结构损坏,Gradle没有权限写入重建缓存
分步解决
- 第一步:终止所有存活的Gradle守护进程,释放所有文件锁,在对应项目的android目录下执行命令:
# macOS/Linux系统 ./gradlew --stop # Windows系统 gradlew.bat --stop - 第二步:清理所有残留的损坏缓存,修复目录权限:
- 修复全局Gradle目录权限,执行:
mkdir -p $HOME/.gradle/caches chmod -R u+rw $HOME/.gradle/- 保持在项目的android目录下,删除项目本地的Gradle缓存和所有构建产物:
rm -rf .gradle/ find . -name "build" -type d -exec rm -rf {} + - 第三步:触发缓存全量重建,先执行轻量命令校验环境正常,不要直接跑打包等重任务:
第一次执行该命令时Gradle会重新拉取所有依赖、重新编译构建脚本,耗时会比平时久,属于正常现象,不要中途中断进程避免再次损坏缓存。等命令执行完成无报错,说明Gradle缓存已经重建完成,后续执行任意构建任务都可以正常运行。# macOS/Linux ./gradlew help --refresh-dependencies # Windows gradlew.bat help --refresh-dependencies
后续清理缓存的正确方式
- 优先使用Gradle官方提供的清理命令,不要直接手动删除全局缓存目录:项目级构建缓存清理执行
./gradlew cleanBuildCache即可 - 如果确实需要清空全局缓存,必须先执行
./gradlew --stop停掉所有守护进程,再删除缓存目录,避免文件锁导致缓存损坏 - 如果以上步骤执行完仍报错,检查本地JDK版本和当前项目使用的Gradle版本是否匹配:Gradle 7.x要求JDK版本不低于11,Gradle 8.x要求JDK版本不低于17,版本不匹配也会触发脚本编译加载失败。
内容的提问来源于stack exchange,提问作者Roberto
相关产品推荐
相关产品推荐

