2015-05-13 36 views
1

眼下,對於gradle這個目標的一個經常運行,輸出看起來是這樣的:使用Gradle,我怎樣才能打印每個任務執行多長時間?

 
:DataPlanner:clean 
:common:clean 
:server:clean 
:simulator:clean 
:util:clean 
:util:compileJava 
:util:processResources UP-TO-DATE 
:util:classes 
:util:compileTestJava 
:util:processTestResources 
:util:testClasses 
:util:test 
:util:jar 
:common:compileJava 
:common:processResources UP-TO-DATE 
:common:classes 
:common:compileTestJava 
:common:processTestResources 

我如何得到它更多的是這個樣子?

 
:DataPlanner:clean 
took 2secs 
:common:clean 
took 2 secs 
:server:clean 
took 3 secs 
:simulator:clean 
took 4 secs 
:util:clean 
took 1 sec 
... 

如果無法讓每項任務在完成時打印其持續時間,則打印時間戳將是一個可接受的選擇。

任何想法?

修改建議的解決方案,並沒有對我的工作之一,這一個做的:

gradle.taskGraph.beforeTask { Task task -> 
task.ext.setProperty("startTime", new java.util.Date()) 
} 

gradle.taskGraph.afterTask { Task task, TaskState state -> 
    int secs = (new java.util.Date().getTime() - task.ext.startTime.getTime())/1000 
    int mins = secs/60 

    if (4 < secs) { 
     int sec = secs - mins * 60 
     println " -> took " + mins + ((1 == mins) ? " min " : " mins ") + sec + ((1 == sec) ? " sec" : " secs") 
    } 
} 

回答

2

您可以添加執行前後鉤子來執行此操作。在任務執行之前,將當前時間添加爲任務的屬性,然後在執行後可以將當前時間與保存的時間進行比較。

import java.time.* 
gradle.taskGraph.beforeTask { Task task -> 
    task.ext.setProperty("startTime", Instant.now()) 
} 

gradle.taskGraph.afterTask { Task task, TaskState state -> 
    println task.name + " took " + Duration.between(task.ext.startTime, Instant.now()).toSeconds() + " seconds" 
} 

結果輸出這樣的:

$gradle clean 
:clean 
clean took 0.043000000 seconds 
+0

上面並沒有爲我工作,但我發現一個小的修改,我可以讓它工作:

gradle.taskGraph.beforeTask { Task task -> task.ext.setProperty("startTime", new java.util.Date()) } gradle.taskGraph.afterTask { Task task, TaskState state -> int secs = (new java.util.Date().getTime() - task.ext.startTime.getTime())/1000 int mins = secs/60 if (4 < secs) { int sec = secs - mins * 60 println " -> took " + mins + ((1 == mins) ? " min " : " mins ") + sec + ((1 == sec) ? " sec" : " secs") } }
jasons2645

+0

@ jasons2645對此深感抱歉!我的版本使用新的Java 8時間庫。我應該提到這一點。 – whaleberg

2

我不知道你是怎麼得到這個特定的輸出。但是,您可以使用--profile命令行標誌來獲取有關構建的報告。然後你會得到位於下建立/報告/ profile文件的HTML報告,該報告在搖籃2.3的樣子:

enter image description here

可以搖籃文檔here在閱讀更多關於它。

如果您堅持獲得您指定的特定輸出,您可以嘗試使用beforeTaskafterTask taskGraph掛鉤來測量時間並將其打印出來。請注意,如果gradle將以並行模式執行,您需要謹慎對待它。

相關問題