在我的项目中,我在运行时访问由gradle springboot插件buildInfo()
任务生成的build-info.properties
,以将我的项目版本包含在日志元数据中。
我的问题是,该文件包含在Gradle任务(例如通过类路径指纹进行测试)的指纹计算中,但该文件中的版本会随着我的管道中的每个构建而变化,因此我永远无法重用该缓存。
我看到this问题是关于如何从运行时中排除该文件,但如果我遵循该建议,
文件在运行时自然就不可用了。
文件/BOOT-INF/class/META-INF/www.example.com是空的。2因此我的应用程序在启动时失败。build-info.properties is empty. Therefore my application fails on startup.
我能以某种方式将其排除在缓存指纹计算之外吗?
编辑:
我目前使用的是Gradle 6.8.1和Spring Bot 2.2.2。
下面是我生成文件的方法:
springBoot {
buildInfo()
}
这就是我如何添加规范化:
normalization {
runtimeClasspath {
ignore "**/build-info.properties"
}
}
1条答案
按热度按时间2hh7jdfx1#
Gradle输入规范化应该是一个解决方案。
不知道你为什么说“如果我按照建议,文件在运行时不可用了”。
此配置的效果是,对www.example.com的更改build-info.properties将被忽略,以进行最新检查和构建缓存键计算。注意,这不会更改测试任务的运行时行为-即,任何测试仍然能够加载build-info.properties,并且运行时类路径仍然与以前相同。
下面是一些证明上述内容的测试
第一次运行生成
test
任务已执行,因为没有生成缓存。使用不同版本第二次运行构建
正如您所看到的,只执行了构建任务,但
test
任务仍然是UP-TO-DATE
。build-info.properties
在build/resources/main/META-INF/
下仍然可用如果启用,可使用Sping Boot 执行器端点
/actuator/info
进行访问考虑排除构建时间通过从构建信息中排除时间,可以进行更多优化。
通常优化本地构建是一个好主意。否则
build
任务将总是被执行。通过排除时间,所有任务将被缓存但
build.time
将不是build-info.properties
的一部分