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

求助:Gradle Enterprise因依赖名称随构建变更致缓存未命中

解决Gradle Enterprise缓存未命中:忽略模块依赖名称但保留代码变更哈希

针对你遇到的问题——:my-module的Jar文件名随Jenkins构建号变化导致Gradle Enterprise缓存未命中,但又需要保留代码变更时的哈希更新——可以通过自定义输入规范化规则来解决,核心思路是在计算依赖哈希时统一该模块的Jar文件名,忽略构建编号后缀,同时保留内容哈希的计算。

具体配置方案

在项目根目录的build.gradle中添加以下配置:

configurations.all {
    incoming.artifactView {
        // 只针对:my-module这个项目依赖做处理
        componentFilter { component ->
            component instanceof ProjectComponentIdentifier && component.projectPath == ':my-module'
        }
        normalization {
            runtimeClasspath {
                // 统一Jar文件的逻辑名称,忽略实际文件名中的构建编号
                eachFile { file ->
                    // 匹配带构建编号的Jar文件名,比如my-module-123.jar
                    if (file.sourceFile.name.matches(/my-module-\d+\.jar/)) {
                        // 替换为固定名称,让哈希计算时用这个固定值
                        file.path = 'my-module.jar'
                    }
                }
            }
            // 如果需要处理编译类路径,添加compileClasspath的配置
            compileClasspath {
                eachFile { file ->
                    if (file.sourceFile.name.matches(/my-module-\d+\.jar/)) {
                        file.path = 'my-module.jar'
                    }
                }
            }
        }
    }
}

配置说明

  • componentFilter:精准筛选出:my-module的项目依赖,避免影响其他依赖的哈希计算
  • eachFile重命名:在计算输入哈希时,将带构建编号的Jar文件名统一为固定的my-module.jar,这样不管实际文件名如何变化,哈希计算时都使用同一个逻辑名称,消除文件名变化对缓存键的影响
  • 保留内容哈希:该配置不会跳过Jar内容的哈希计算,当:my-module的代码变更导致Jar内容变化时,哈希值依然会更新,确保缓存只在内容不变时命中

验证方式

  1. 构建两次代码未变更的版本,查看Gradle Enterprise的缓存命中情况,确认两次构建的缓存键一致
  2. 修改:my-module的代码后构建,确认缓存键发生变化,不会错误命中旧缓存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:55:20