build.gradle dofirst不更新战争文件



在Gradle项目中,我正在尝试在build.gradle中生成战争之前更改属性文件值,如下所示,

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时,它都会在以前的日期生成战争。说,我是在11:30上首次构建,并在11:34上进行第二版。第二次建造的战争包含时间为11:30而不是11:34。我的目的是在建立战争时更新日期。是正确的吗?

我简化了您的解决方案并对其进行了测试。对我来说,当我运行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不包含在当前战争中的,因为您正在打包的战争资源已在您执行战争。

如果要在战争档案中包含带有当前构建时间的agation.properties文件,则应创建一个自定义任务以更新属性文件并将任务连接到buildchain,然后再处理资源。。我为您创建了一个示例任务:

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

最新更新