2012-07-10 44 views
6

我從gradle腳本調用ant.signjar。 如何捕獲其輸出? 我沒有輕易地將INFO的輸出提升到另一個級別,也沒有將輸出攔截或包裝成警告級別的錯誤警告。 目前Signjar迴應說證書很快就會過期,但是這並沒有顯示在WARN級別上,這不是很好。從Gradle調用Ant任務時如何攔截或提升日誌消息

+0

作爲一個側面注:搖籃提供[簽約插件](http://gradle.org/docs/current/userguide/signing_plugin.html)進行簽名工件,所以你不需要使用Ant任務。 – 2012-07-11 20:29:39

+0

@BenjaminMuschko我知道簽名插件,但文檔說它僅用於生成文件的PGP簽名。上傳到Maven Central。如何使用簽名插件簽署JAR文件? – Vampire 2012-07-12 05:50:07

回答

2

我假設Ant任務使用Ant的日誌記錄框架,而不僅僅是打印到標準輸出。在那種情況下,你有沒有嘗試過以下方法?

task taskThatCallsAntTask { 
    logging.level = LogLevel.INFO 
} 

當以這種方式配置,而任務執行日誌級別將被更改爲INFO(並恢復了回到事後),無論哪個日誌級別調用搖籃時設置。請注意,您無法提升Ant日誌事件的日誌級別;它取決於它在哪個級別記錄的Ant任務。

+0

這可以工作,但會產生太多日誌記錄,因爲它還會打印其他非警告消息。我真的更喜歡我是否可以攔截輸出並在每行範圍內提升。任何想法呢? – Vampire 2012-09-10 10:55:53

+0

在http://forums.gradle.org上發佈功能請求(* idea *)。 – 2012-09-12 11:51:33

+0

這樣做是在http://forums.gradle.org/gradle/topics/interception_of_ant_task_output,謝謝 – Vampire 2012-09-13 07:55:53

0

這是一種通過在調用期間註冊自定義BuildListener來捕獲Ant任務輸出的方法。

def captureAntOutput(ant, Closure command) { 
    def buffer = new ByteArrayOutputStream() 
    def captureStream = new PrintStream(buffer, true, "UTF-8") 
    def listener = new org.apache.tools.ant.DefaultLogger(
      errorPrintStream: captureStream, 
      outputPrintStream: captureStream, 
      messageOutputLevel: org.apache.tools.ant.Project.MSG_INFO 
    ) 

    ant.project.addBuildListener(listener) 
    project.configure(ant, command) 
    ant.project.removeBuildListener(listener) 

    return buffer.toString("UTF-8"); 
} 

實例:

String result = captureAntOutput(ant) { 
    echo(message: "hello") 
} 
assert result.contains("hello")