我遇到了问题,gradle中的Exec任务对于最新检查是否从standardOutput捕获了输出文件有问题。

我试图尽可能简化示例:

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块中关闭和/或刷新流。

最佳答案

问题是,线

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")
    }
}

干杯,

雷内

关于gradle - Gradle:如果从standardOutput解析,则输出文件不是最新的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13172215/

10-12 16:45