1

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

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

task t {
    inputs.dir 'src'
    outputs.dir 'dst'

    doLast {
        copy {
            from 'src'
            into 'dst'
        }
    }
}

将文件foo.txt放入src/. 现在运行gradle t。结果: 中有一个新文件foo.txtdst/

如果我gradle t再次运行,它会说它是 UP-TO-DATE 并且没有运行。好的。现在,如果我删除dst/foo.txt,它将运行,正确检测到目标已更改。

此外,如果我编辑 的内容dst/foo.txt,它会识别更改。好的!

但是,如果我在其中添加一个附加文件dst,例如dst/badfile.txt,它不会将其识别为“脏”输出目录。

由于我将输出目录定义为一个目录,而不是一组输出文件,我希望它能够检查目录的整个状态。为什么它不认为附加文件有区别?或者我在这里错过了什么?

4

1 回答 1

1

我不能确定为什么会做出这个决定。可能是因为需要支持共享同一输出目录的多个任务(例如,compileJava和的情况processResources)。

于 2013-10-12T00:51:55.270 回答