我有一个试图复制'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),但这也不起作用。
第二次运行构建时,此任务确实会运行,因此它似乎是配置和执行之间的时间问题,但我的想法已经不多了。任何建议都会受到欢迎。
答案 0 :(得分:5)
代码在任何任务运行之前在配置时读取时间戳。 (您可以通过添加println
语句来查看此内容。)因为此时不存在时间戳文件(特别是在第一次运行时),所以没有配置源位置(from ...
),并且任务是被认为是最新的,因为没有什么可复制的。将整个时间戳逻辑放入into
块(into { ...; appBuildDir }
)可以解决问题。