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

时间:2014-11-10 19:28:47

标签: gradle task 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
    }
}   

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

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

第二次运行构建时,此任务确实会运行,因此它似乎是配置和执行之间的时间问题,但我的想法已经不多了。任何建议都会受到欢迎。

1 个答案:

答案 0 :(得分:5)

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