我将使用一个简单的任务来说明我的问题。 (我真正的任务是一个python脚本,它根据输入的xml文件和图像文件集生成图像。该任务的输出是一个包含不同xml文件和图像的目录。)
无论如何,请考虑以下任务:
task t {
inputs.dir 'src'
outputs.dir 'dst'
doLast {
copy {
from 'src'
into 'dst'
}
}
}
将文件foo.txt
放入src/
。现在运行gradle t
。结果:foo.txt
中有一个新文件dst/
。
如果我再次运行gradle t
,它会说它是UP-TO-DATE而不是运行。好。
现在,如果我删除dst/foo.txt
,它将运行,正确检测到目标已更改。
另外,如果我编辑dst/foo.txt
的内容,它会识别出更改。好!
但是,如果我在dst
内添加了一个附加文件,例如dst/badfile.txt
,它不会将其识别为“脏”输出目录。
由于我将输出目录定义为目录,而不是一组输出文件,因此我希望它能够检查目录的整个状态。为什么不考虑其他文件有什么区别?或者我在这里遗漏了什么?
答案 0 :(得分:1)
我无法确定为何做出这个决定。也许是因为需要支持共享相同输出目录的多个任务(例如compileJava
和processResources
的情况)。