为何Gradle即便compileJava命中构建缓存仍在配置阶段下载compileClasspath依赖
原因说明
Gradle在校验任务是否命中构建缓存时,需要先确认任务所有输入项的哈希值和缓存中记录的哈希值完全匹配。compileJava任务的输入包含了compileClasspath下全部依赖的哈希,因此哪怕任务最终不需要执行,Gradle也需要先下载所有依赖来计算哈希,完成缓存命中校验,这就是你当前遇到的核心问题。
可行的优化方案
- 持久化Gradle依赖缓存目录
你可以把Docker容器内的~/.gradle/caches目录挂载为持久化卷,或者提前把项目常用的依赖预打入构建用的基础镜像,CI场景下也可以用CI平台自带的缓存功能缓存该目录,这样每次构建不需要重复下载已经存在的依赖。 - 开启Gradle内置的依赖缓存优化
在项目根目录的gradle.properties文件中添加以下配置:
# 开启依赖缓存功能 org.gradle.dependency.caching=true # 配置动态版本依赖的缓存时长,可根据你的依赖更新频率调整,单位为小时 org.gradle.dependency.cache.dynamicVersions=24 # 配置快照版本等变动模块的缓存时长 org.gradle.dependency.cache.changingModules=24
- 开启配置缓存(Gradle 6.0及以上版本支持)
同样在gradle.properties中添加配置,复用依赖解析结果和配置阶段的产物,进一步降低开销:
org.gradle.configuration-cache=true
内容的提问来源于stack exchange,提问作者Ivica Vojinovic
相关产品推荐
相关产品推荐

