我有一个Spring Boot和Gradle项目。我在gradle可以读取它的gradle.properties文件中定义了应用程序版本。我希望在应用程序代码中包含此数字,作为@Value("${version}")
注入值。
我要做的是将版本号复制到application.properties或单独的version.properties文件中(均位于src / main / resources中)。 实际上,我想将属性文件加载到Properties对象中,设置' app.verion'财产,然后写出来。理想情况下,所有这些步骤都将在build dir($ buildDir / resources / main / version.properties)中的文件上完成。这样我就不需要在VCS中存储这个dinamically set变量。不幸的是,只有在源目录中编写属性文件时才会有效。如果我尝试编辑构建中的那个,那么它没有任何效果。
你可以帮帮我吗?我的任务应该什么时候开始我觉得Spring可能会覆盖build中的文件。我的代码是:
task appendVersionToApplicationProperties << {
// File versionPropsFile = new File("$buildDir/resources/main/version.properties")
versionPropsFile.withWriter { w ->
Properties p = new Properties()
versionPropsFile.withInputStream {
p.load(it)
}
p['app.version'] = appVersion // this is from gradle.properties
p.store w, null
}
}
build.finalizedBy(appendVersionToApplicationProperties)
gradle build的输出:
$ gradle clean build
:clean
:compileJava
:compileGroovy UP-TO-DATE
:processResources
:appendVersionToApplicationProperties UP-TO-DATE
:classes
:findMainClass
:war
:bootRepackage
:assemble
:compileTestJava
:compileTestGroovy UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses
:test
:check
:build
BUILD SUCCESSFUL
Total time: 27.16 secs
答案 0 :(得分:2)
你可以这样做:
task appendVersionToApplicationProperties {
// write your properties
// this is just basic groovy code
Properties props = new Properties()
props.put('app.version', appVersion) // get it from wherever
def file = new File("$buildDir/resources/main/version.properties")
file.createNewFile()
props.store(file.newWriter(), null)
}
// this will run your task after the java compilation and resource processing
processResources.finalizedBy appendVersionToApplicationProperties