Gradle中的复制任务在第一次尝试时显示"UP TO DATE"

Par*_*axG 2 task gradle build.gradle

我有一个复制任务,试图复制'dependsOn'任务中提取的文件.目标文件夹包含从属性文件中检索的时间戳.

task copyFilesToBuild(type: Copy, dependsOn:unzipExtFile) {
    def tmpTimestampFile = file("$buildDir/tmp/timestamp.properties")
    if (tmpTimestampFile.exists()) {
        stampProp = new Properties()
        stampProp.load(new FileInputStream(tmpTimestampFile))
        def timestampFromFile=stampProp.getProperty('propfileTimestamp')
        def unzippedExtFilesDir = file("$buildDir/tmp/unzipped/static/js/app")
        def appBuildDir = file("$buildDir/apptmp/war/app/app_$timestampFromFile/sub")
        from unzippedExtFilesDir
        into appBuildDir
    }
}   
Run Code Online (Sandbox Code Playgroud)

第一次通过我的构建(在干净之后)它说'UP TO DATE'(调试输出说它正在跳过任务,因为它没有源文件.)

我尝试添加闭包来推迟评估(来自{unzippedExtFilesDir})并尝试将任务的主体放在doFirst中,但都没有任何效果.我也尝试直接在'from'语句中使用dependsOn任务名称(unzipExtFile),但这也没有用.

第二次构建运行时,这个任务就会运行,所以它似乎是配置和执行之间的时间问题,但我的想法已经不多了.欢迎大家提出意见.

Pet*_*ser 5

代码在配置时读取时间戳,在任何任务运行之前.(您可以通过添加println语句来查看.)因为此时不存在时间戳文件(特别是在第一次运行时),所以没有from ...配置源位置(),并且任务被认为是最新的,因为没有任何内容复印.将整个时间戳逻辑放入intoblock(into { ...; appBuildDir })应该可以解决问题.