Gradle中的“复制任务”表示;“最新的”;第一次尝试

Gradle中的“复制任务”表示;“最新的”;第一次尝试,gradle,task,build.gradle,Gradle,Task,Build.gradle,我有一个复制任务,它试图复制在“dependsOn”任务中提取的文件。目标文件夹包含从属性文件检索的时间戳 task copyFilesToBuild(type: Copy, dependsOn:unzipExtFile) { def tmpTimestampFile = file("$buildDir/tmp/timestamp.properties") if (tmpTimestampFile.exists()) { stampProp = new Prope

我有一个复制任务,它试图复制在“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
    }
}   
在我的构建过程中,第一次(清理后)它会显示“最新”(调试输出会显示它正在跳过任务,因为它没有源文件)

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


第二次运行构建时,此任务确实会运行,因此这似乎是配置和执行之间的一个计时问题,但我已经没有主意了。欢迎提供任何建议。

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

这就解决了,谢谢。当目标文件夹出错时,Gradle发出的关于“无源文件”的消息非常误导。我不知道你可以在“入”块中添加这种尾部。有没有全面的Gradle语法指南?“无源文件?”“表示没有源文件/目录,而不是没有目标目录。具体的构建语言记录在中。构建语言的一些一般“机制”记录在中。位置
与位置
与位置
之间的区别在于,lather使用闭包配置位置,而第一个直接使用位置。对关闭进行及时评估。