Gradle 构建缓存是什么
Gradle 的任务级缓存:任务输入不变时直接复用上次的输出,分本地缓存与远程缓存两类;配合配置缓存还能减少配置阶段的开销。任务必须声明输入输出才可被缓存,未声明的任务视为不可缓存。CI 上共享远程缓存收益最大——本地构建产物能被构建机直接复用。
基本信息
| 启用 | org.gradle.caching=true;CI 可接远程缓存节点 |
|---|---|
| 输入输出 | 任务声明输入输出决定缓存命中;未声明即不可缓存 |
| 加速点 | 配合 --build-cache 与增量构建;配置缓存独立设置 |
| 本地缓存 | 默认位于 Gradle 用户目录下的构建缓存区 |
| 远程缓存 | 在 settings 脚本里配置缓存节点地址,团队共享 |
典型使用场景
- CI 提速:各构建机共享远程缓存,避免重复编译
- 多模块工程:模块任务命中缓存缩短整体时长
- 配置阶段开销大:开配置缓存复用配置结果
- 团队共享:本地构建产物推到远程供他人复用
- 排查未命中:定位哪些输入在变化导致缓存失效
gradle.properties
gradle.properties
org.gradle.caching=true # 任务级构建缓存
org.gradle.parallel=true # 并行执行无依赖任务
org.gradle.configuration-cache=true # 复用配置阶段结果
# 远程缓存在 settings.gradle(.kts) 里配置节点地址缓存未命中排查
| 现象 | 常见原因 | 处理 |
|---|---|---|
| 每次都全量执行 | 任务未声明输入输出 | 补声明或放弃该任务缓存 |
| 部分任务不命中 | 输入含时间戳、绝对路径 | 剔除易变输入或规范化路径 |
| 远程不命中 | 缓存节点不可达或键不一致 | 查节点连通与缓存配置 |
远程缓存对 CI 收益明显:本地构建产物可被构建机直接复用。
配置缓存与部分老旧插件不兼容:先在一台构建机上观察兼容性,再全量开启。