2

如果输出文件是从标准输出中捕获的,我遇到了 gradle 中的 Exec 任务的最新检查问题。

我试图尽可能地简化示例:

task printToOutputFile(type: Exec) {
    inputs.file file("file1") // not relevant for this example
    outputs.file file("file2")

    commandLine = ["echo", "1234"]
    standardOutput = new FileOutputStream("file2")
}

重新运行此任务时,我希望它是最新的,但事实并非如此。

使用 standardOutput 作为输出时,如何使 UP-TO-DATE 检查工作?

我尝试过的:
在 doLast 块中关闭和/或刷新流。

4

1 回答 1

3

问题是,这条线

standardOutput = new FileOutputStream("file2")

更改 file2 的 lastModified 属性。要使最新检查正常工作,您必须将此分配移至执行阶段。您可以通过将此分配放在 doFirst 块中来做到这一点。以下代码段应该可以解决问题:

task printToOutputFile(type: Exec) {
    inputs.file file("file1") // not relevant for this example
    outputs.file file("file2")

    commandLine = ["echo", "1234"]

    doFirst{
        standardOutput = new FileOutputStream("file2")
    }
}

干杯,

勒内

于 2012-11-01T07:43:28.723 回答