2012-11-01 47 views
2

如果輸出文件是從standardOutput中捕獲的,那麼Gradle中的Exec任務在最新檢查時遇到問題。Gradle:如果從standardOutput解析輸出文件不是最新的

我試圖簡化儘可能的例子:當再次運行這個任務,我希望它是UP-TO-DATE

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塊中的流。

回答

3

問題是,該線

standardOutput = new FileOutputStream("file2") 

改變file2中的上次更改屬性。爲了使最新的檢查工作,您必須將此作業移至執行階段。您可以通過將此作業放在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") 
    } 
} 

歡呼聲,

+0

謝謝:)這其實是非常合乎邏輯的。我再一次沒有想到階梯不同階段。 –