2

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ブロックでストリームを閉じるかフラッシュする。

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 に答える