Build 为什么Gradle输出检查(对于最新的跳过)不考虑额外的?坏的';输出目录中的文件是否存在差异?
我将用一个简单的任务来说明我的问题。 (我真正的任务是一个python脚本,它根据xml文件和图像文件的输入集生成图像。该任务的输出是一个包含不同xml文件和图像的目录。) 无论如何,考虑这个任务:Build 为什么Gradle输出检查(对于最新的跳过)不考虑额外的?坏的';输出目录中的文件是否存在差异?,build,gradle,Build,Gradle,我将用一个简单的任务来说明我的问题。 (我真正的任务是一个python脚本,它根据xml文件和图像文件的输入集生成图像。该任务的输出是一个包含不同xml文件和图像的目录。) 无论如何,考虑这个任务: task t { inputs.dir 'src' outputs.dir 'dst' doLast { copy { from 'src' into 'dst' } } } 将文件f
task t {
inputs.dir 'src'
outputs.dir 'dst'
doLast {
copy {
from 'src'
into 'dst'
}
}
}
将文件foo.txt
放入src/
中。现在运行gradlet
。结果:在dst/
中有一个新文件foo.txt
如果我再次运行gradle t
,它会说它是最新的,没有运行。好。
现在,如果我删除dst/foo.txt
,它将运行,正确地检测到目标已更改
此外,如果我编辑了dst/foo.txt的内容,它会识别更改。好!
但是,如果我在dst
中添加了一个额外的文件,例如dst/badfile.txt
,它将不会将其识别为“脏”输出目录
因为我将输出目录定义为一个目录,而不是一组输出文件,所以我希望它检查目录的整个状态。为什么它不认为额外的文件是不同的?还是我遗漏了什么?我不能肯定为什么会做出这个决定。可能是因为需要支持多个任务共享同一个输出目录(例如,
compileJava
和processResources
)的情况下)。我不能肯定为什么会做出这个决定。可能是因为需要支持共享同一输出目录的多个任务(例如,compileJava
和processResources
)