在gradle项目中,我试图在build.gradle
中生成WAR之前更改属性文件值,如下所示,
war {
doFirst {
def propertyFile = file "src/main/resources/properties/about/About.properties"
def props = new Properties()
propertyFile.withReader { props.load(it) }
props.setProperty('releaseDate', new Date().format("yyyy-MM-dd HH:mm:ss"))
propertyFile.withWriter { props.store(it, null) }
}
rootSpec.exclude("**/test.jar")
}
但每当我给build
时,它会生成具有前一个日期时间的WAR。说,我在11:30
进行首次构建,在11:34
进行第二次构建。第二个构建的WAR包含11:30
而不是11:34
的时间。我的目的是在构建WAR时更新日期。这样对吗?
答案 0 :(得分:0)
我简化了您的解决方案并进行了测试。对我来说,当我运行build
或war
时,它始终会更新属性文件中的日期。请注意,我为测试目的更改了路径。这是代码:
war {
doFirst {
File propsFile = file "src/main/resources/about.properties"
Properties props = new Properties()
props.load(propsFile.newDataInputStream())
props.setProperty('releaseDate', new Date().format('yyyy-MM-dd HH:mm:ss'))
props.store(propsFile.newWriter(), null)
}
}
请注意,由于您正在处理的战争资源已被处理,因此当前战争中包含的about.properties的releaseDate
不 之前你执行战争。
如果要将包含当前构建时间的about.properties文件包含到war存档中,则应创建自定义任务以更新属性文件,并在处理资源之前将任务挂钩到构建链中的某个点。我为你创建了一个示例任务:
task updateReleaseDate {
doLast {
File propsFile = file "src/main/resources/about.properties"
Properties props = new Properties()
props.load(propsFile.newDataInputStream())
props.setProperty('releaseDate', new Date().format('yyyy-MM-dd HH:mm:ss'))
props.store(propsFile.newWriter(), null)
}
}
processResources.dependsOn updateReleaseDate
如果没有自定义任务,您的构建链就像这样。在processResources任务处理资源之后更新属性,因此当前战争中包含不:compileJava->processResources->classes->war
使用自定义任务,您的构建链看起来像这样。在processResources任务处理资源之前更新属性,因此在当前战争中包含:compileJava->updateReleaseDate->processResources->classes->war