使用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使用Gradle,如何打印每个任务执行所需的时间?,gradle,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 :
$gradle clean
:clean
clean took 0.043000000 seconds
:DataPlanner:clean
:普通:清洁
:服务器:干净
:模拟器:清洁
:util:clean
:util:compileJava
:util:processResources最新
:util:classes
:util:compileTestJava
:util:processTestResources
:util:testClasses
:util:test
:util:jar
:common:compileJava
:common:processResources最新
:普通:班级
: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
...
:DataPlanner:clean
花了2秒
:普通:清洁
花了2秒钟
:服务器:干净
花了3秒钟
:模拟器:清洁
花了4秒钟
:util:clean
花了1秒钟
...
如果不可能让每个任务在完成时都打印其持续时间,那么打印时间戳将是一个可接受的选择
有什么想法吗
修改一个对我不起作用的建议解决方案,这个解决方案:
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" )
}
}
gradle.taskGraph.beforeTask{Task任务->
task.ext.setProperty(“startTime”,new java.util.Date())
}
gradle.taskGraph.posterTask{任务任务,任务状态->
int secs=(new java.util.Date().getTime()-task.ext.startTime.getTime())/1000
整数分钟=秒/60
如果(4<秒){
整数秒=秒-分钟*60
println“->取“+mins+((1==分钟);“min”:“min”)+sec+((1==秒);“sec”:“secs”)
}
}
我不知道您是如何获得这个特定输出的。但是,您可以使用--profile
命令行标志来获取有关构建的报告。然后,您将在build/reports/profile下获得一个html报告,它在Gradle 2.3中看起来像:
您可以在Gradle文档中了解更多信息
如果您坚持要获得指定的特定输出,可以尝试使用
beforeTask
和beforeTask
任务图挂钩测量时间并将其打印出来。请注意,如果gradle将在并行模式下执行,您需要对此保持谨慎。您可以添加执行前和执行后挂钩。在任务执行之前,将当前时间添加为任务的属性,然后在执行之后,可以将当前时间与保存的时间进行比较
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"
}
结果如下所示:
: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
$gradle clean
:clean
clean took 0.043000000 seconds
上面这些对我来说不起作用,但我发现只要稍加修改,我就可以让它工作:gradle.taskGraph.beforeTask{Task Task->Task.ext.setProperty(“startTime”,new java.util.Date())}gradle.taskGraph.afterTask{Task Task,TaskState->int secs=(new java.util.Date().getTime()-Task.ext.startTime())/1000 int-mins=secs/60如果(4