2. 什么是Gradle构建缓存?

Gradle构建缓存是一种半永久性存储机制,用于保存构建任务的输出结果。它的核心目标是:当任务输入未发生变化时,避免重复执行构建任务,从而直接复用之前生成的构建产物。这种机制能显著缩短后续构建时间,提升开发效率。

在Gradle中,每个任务的输出都通过缓存键(cache key)唯一标识。执行任务前,Gradle会:

  1. 对所有任务输入进行哈希计算生成缓存键
  2. 检查本地或远程缓存是否存在对应结果
  3. 若存在则直接复用,否则执行任务并存储结果

下面介绍两种主要的缓存类型:

2.1. 本地构建缓存

  • 存储位置:默认使用用户目录下的 $USER_HOME/.gradle/caches
  • 特性
    • 默认自动启用
    • 存储位置可自定义配置
    • 同一系统内的所有构建共享缓存数据

2.2. 远程构建缓存

  • 工作方式:通过HTTP协议进行读写操作的共享缓存
  • 核心价值
    • CI构建场景:每次干净构建时填充缓存,避免重建未修改组件
    • 跨节点共享:支持CI代理间共享构建产物
  • 注意事项
    • 默认未启用需手动配置
    • 读写优先级:本地缓存 → 远程缓存(若本地未命中则从远程下载并存储到本地)

3. 配置Gradle构建缓存

settings.gradle 文件中通过 buildCache 块进行配置,使用Groovy闭包语法:

3.1. 配置本地构建缓存

buildCache {
    local {
        directory = new File(rootDir, 'build-cache')
        removeUnusedEntriesAfterDays = 30
    }
}

关键配置说明:

  • directory:指定缓存存储路径(示例使用项目根目录)
  • removeUnusedEntriesAfterDays:设置未使用条目的保留天数(默认7天)
  • 空间优化:定期自动清理长期未使用的条目
  • 手动清理:可直接删除 $USER_HOME/.gradle/caches 目录(Linux下使用 rm -r $HOME/.gradle/caches

其他重要属性:

local {
    enabled = true      // 是否启用缓存(默认true)
    push = true         // 是否存储构建产物(本地缓存默认true)
}

3.2. 配置远程缓存

buildCache {
    remote(HttpBuildCache) {
        url = 'https://cache.example.com:8123/cache/'
        credentials {
            username = 'build-user'
            password = 's3cr3tP@ss'
        }
    }
}

配置要点:

  • url:远程缓存服务器地址
  • credentials:认证凭据(用户名/密码)
  • 安全建议:生产环境应使用更安全的认证方式(如OAuth)

4. 使用Gradle构建缓存的优势

  • 开发效率提升:显著缩短构建时间,减少等待
  • 分支切换加速:在Git分支间切换时,未修改的任务直接复用结果
  • CI资源优化
    • 减少CI代理的计算负载
    • 降低CI构建的基础设施成本
  • 网络优化:远程缓存结果存储到本地后,减少重复网络传输
  • 团队协作增强
    • 开发者间共享构建结果,避免重复构建他人修改
    • CI代理间共享构建产物
  • 质量改进:构建加速促进更频繁的集成测试,缩短反馈周期

5. 结论

Gradle构建缓存通过智能复用构建产物,有效解决了重复构建的性能瓶颈。本地缓存提供即时加速,远程缓存则实现团队级共享。合理配置缓存策略后,无论是日常开发还是CI流程都能获得显著的速度提升,最终转化为更高的开发效率和软件质量。对于中大型项目,构建缓存几乎是必备优化手段。


原始标题:Gradle Build Cache Basics