Build 为什么Gradle输出检查(对于最新的跳过)不考虑额外的?坏的';输出目录中的文件是否存在差异?

Build 为什么Gradle输出检查(对于最新的跳过)不考虑额外的?坏的';输出目录中的文件是否存在差异?,build,gradle,Build,Gradle,我将用一个简单的任务来说明我的问题。 (我真正的任务是一个python脚本,它根据xml文件和图像文件的输入集生成图像。该任务的输出是一个包含不同xml文件和图像的目录。) 无论如何,考虑这个任务: task t { inputs.dir 'src' outputs.dir 'dst' doLast { copy { from 'src' into 'dst' } } } 将文件f

我将用一个简单的任务来说明我的问题。 (我真正的任务是一个python脚本,它根据xml文件和图像文件的输入集生成图像。该任务的输出是一个包含不同xml文件和图像的目录。)

无论如何,考虑这个任务:

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