gradle - Gradle doFirst不更新WAR文件

标签 gradle build.gradle

在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时更新日期。这样对吗?

最佳答案

我简化了您的解决方案并进行了测试。对我来说,当我运行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,而不是您当前正在构建的当前 war 中的,因为您要打包的 war 的资源已在执行 war 之前被处理为

如果要在当前构建的时间中将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任务处理资源后更新属性,因此当前 war 中不包括而不是:compileJava->processResources->classes->war
使用自定义任务,您的构建链如下所示。在
之前更新属性,资源由processResources任务处理,因此在当前 war 中包括:compileJava->updateReleaseDate->processResources->classes->war

关于gradle - Gradle doFirst不更新WAR文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48782125/

相关文章:

groovy - gradle 属性文件 - 放置新属性后如何保留评论?

gradle:如何找到实现特定任务的插件?

java - 如何使用 gradle 使用 Google Checkstyle 规则编译项目?

java - 由 : java. io.IOException 引起:无法锁定使用跟踪假脱机文件

android - 两个依赖使用相同的库但版本不同

gradle - 如何在要用于包装的项目中包括Gradle发行版

android - 无法合并dex-Gradle 3.0.0

java - 覆盖 build.gradle 中的任务

android - 为什么需要 gradle build packagingOptions?

android - 错误:任务 ':app:ndkBuild'的执行失败