我有一个多项目 Gradle 项目,在根项目中,我有以下内容:
task timeStamp {
doLast {
Date now = new Date()
println "All completed @ $now"
}
}
allprojects {
afterEvaluate {
it.getTasks().each {
println "finalize set for \"$it.name\""
if (it.name != "timeStamp") {
it.finalizedBy(':timeStamp')
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在运行时的输出中gradlew build,timeStamp 任务已运行,但它在其他一些任务之前运行。
如何在所有其他输出之后打印此时间戳?(BUILD SUCCESSFUL in ##s如果可能的话,我更喜欢它直接在输出之前)
如果您只是想在构建结束时(在执行最后一个任务之后)打印时间戳,您可以按如下方式实现:
gradle.getTaskGraph().whenReady { graph ->
graph.getAllTasks().last().doLast {
Date now = new Date()
println "\n ***** All completed @ $now ***"
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您将根据 Gradle 计算的任务执行图确定要执行的最后一个任务的操作。
也可以使用buildFinished钩子,但是回调会在BUILD SUCCESSFUL in ##s 消息之后执行
gradle.buildFinished {
Date now = new Date()
println "\n ***** All completed @ $now ***"
}
Run Code Online (Sandbox Code Playgroud)
命令的结果 ./gradlew classes
> Task :compileJava UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
BUILD SUCCESSFUL in 0s
2 actionable tasks: 2 up-to-date
***** All completed @ Thu Sep 20 21:15:03 CEST 2018 ***
Run Code Online (Sandbox Code Playgroud)
使用这两种解决方案,此回调将在您执行的任何任务中执行(gradle build、gradle clean、 *gradle assemble** 、..)
| 归档时间: |
|
| 查看次数: |
1937 次 |
| 最近记录: |