为什么Gradle输出检查(对于UP-TO-DATE跳过)不考虑输出目录中的其他“坏”文件作为区别?

时间:2013-10-12 00:15:52

标签: build gradle

我将使用一个简单的任务来说明我的问题。 (我真正的任务是一个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,它不会将其识别为“脏”输出目录。

由于我将输出目录定义为目录,而不是一组输出文件,因此我希望它能够检查目录的整个状态。为什么不考虑其他文件有什么区别?或者我在这里遗漏了什么?

1 个答案:

答案 0 :(得分:1)

我无法确定为何做出这个决定。也许是因为需要支持共享相同输出目录的多个任务(例如compileJavaprocessResources的情况)。