现在,对于其中一个经常运行的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" )
}
}
答案 0 :(得分:5)
我不知道你是如何得到这个特定的输出的。但是,您可以使用--profile
命令行标志来获取有关构建的报告。然后,您将获得位于build / reports / profile下的HTML报告,该报告在Gradle 2.3中看起来像:
您可以在Gradle文档here中阅读更多相关信息。
如果您坚持获取指定的特定输出,可以尝试使用beforeTask
和afterTask
taskGraph挂钩来测量时间并将其打印出来。请注意,如果gradle将以并行模式执行,您需要小心谨慎。
答案 1 :(得分:3)
您可以添加执行前和执行后挂钩来执行此操作。在任务执行之前,将当前时间添加为任务的属性,然后在执行后,您可以将当前时间与保存的时间进行比较。
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