求助: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内容变化时,哈希值依然会更新,确保缓存只在内容不变时命中
验证方式
- 构建两次代码未变更的版本,查看Gradle Enterprise的缓存命中情况,确认两次构建的缓存键一致
- 修改
:my-module的代码后构建,确认缓存键发生变化,不会错误命中旧缓存
内容的提问来源于stack exchange,提问作者Michael Dz
相关产品推荐
相关产品推荐

