Gradle缓存指纹计算时忽略build-info.properties且保留运行时可用
解决Gradle中build-info.properties导致缓存失效且不影响应用运行的问题
你的核心需求是保留build-info.properties供应用运行时读取,但排除它参与Gradle任务的缓存指纹计算,针对Gradle 6.8.1和SpringBoot 2.2.2,正确的配置方式如下:
完整配置示例
- 保留SpringBoot buildInfo任务生成版本文件:
springBoot { buildInfo() }
- 配置runtimeClasspath归一化规则,跳过build-info.properties的指纹计算:
normalization { runtimeClasspath { ignore "**/build-info.properties" } }
配置原理
buildInfo()任务会在META-INF目录生成包含项目版本的build-info.properties,供Spring应用运行时读取以注入日志元数据。- Gradle的
normalization配置用于调整任务输入输出的指纹校验逻辑,runtimeClasspath下的ignore规则会让Gradle在计算类路径指纹时忽略指定文件。这样即使项目版本每次构建都变化,也不会触发依赖runtimeClasspath的任务(如测试任务)缓存失效。 - 该配置仅修改指纹计算规则,不会移除
build-info.properties文件本身,因此应用启动时仍能正常读取文件内容,不会出现文件缺失或为空的启动失败问题。
问题补充说明
你之前遇到的文件不可用或为空的问题,经排查是构建脚本其他位置的配置错误导致,上述归一化配置本身可以完全解决初始需求——既保留运行时对版本文件的读取能力,又避免版本变更破坏Gradle缓存复用。
内容的提问来源于stack exchange,提问作者Jdv
相关产品推荐
相关产品推荐

