在Gradle中,如何在所有任务完成后输出时间戳?
我有一个多项目Gradle项目,在根项目中,我有以下内容:在Gradle中,如何在所有任务完成后输出时间戳?,gradle,Gradle,我有一个多项目Gradle项目,在根项目中,我有以下内容: task timeStamp { doLast { Date now = new Date() println "All completed @ $now" } } allprojects { afterEvaluate { it.getTasks().each { println "finalize set for \"$it.name
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')
}
}
}
}
在我运行gradlew build
时的输出中,时间戳任务运行,但它在其他一些任务之前运行
如何在所有其他输出之后打印此时间戳?(如果可能的话,我希望它直接位于输出中的
构建成功
之前)您需要完成assembleDebug
和assembleerelease
(或者以任何方式调用它们):
您需要完成
assembleDebug
和assembleRelease
(或以任何方式调用它们):
如果您只是想在构建结束时(在执行最后一个任务之后)打印时间戳,您可以实现如下:
gradle.getTaskGraph().whenReady { graph ->
graph.getAllTasks().last().doLast {
Date now = new Date()
println "\n ***** All completed @ $now ***"
}
}
这样,您将向由Gradle计算的任务执行图确定的最后一个要执行的任务添加一个操作
您也可以使用buildFinished钩子,但回调将在#消息中的构建成功后执行
gradle.buildFinished {
Date now = new Date()
println "\n ***** All completed @ $now ***"
}
使用命令/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 ***
对于这两种解决方案,无论您执行什么任务(gradle build、gradle clean、*gradle assembly**、…),都将执行此回调。如果您只想在生成结束时打印时间戳(在执行最后一个任务之后),可以按如下方式实现:
gradle.getTaskGraph().whenReady { graph ->
graph.getAllTasks().last().doLast {
Date now = new Date()
println "\n ***** All completed @ $now ***"
}
}
这样,您将向由Gradle计算的任务执行图确定的最后一个要执行的任务添加一个操作
您也可以使用buildFinished钩子,但回调将在#
消息中的构建成功后执行
gradle.buildFinished {
Date now = new Date()
println "\n ***** All completed @ $now ***"
}
使用命令/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 ***
对于这两种解决方案,无论您执行什么任务(gradle build、gradle clean、*gradle Assembly**,…)我尝试用您的代码替换我的代码,但finalizebuild任务从未执行过。@b而且这些任务可能有不同的名称,graph.getAllTasks().last()
是相当通用的-由于问题没有任何名称,我只能提供一个通常有效的示例-当任务名称匹配时(一个任务甚至不能由/dependsOn最终确定输出的每个任务,只有大多数任务);例如:我尝试用您的代码替换我的代码,但finalizebuild任务从未执行过。@b如果任务可能有不同的名称,graph.getAllTasks().last()
是相当通用的,因为问题没有任何名称,所以我只能提供一个示例,通常有效,而任务的名称是匹配的(每个输出的都不能由/dependsOn完成,只能是其中的大多数);例如:我验证了'gradle.buildFinished'解决方案,即使命令失败,也有办法调用它吗?我想在最后打印一些额外的内容,即使构建失败。我验证了'gradle.buildFinished'解决方案,即使命令失败,也有办法调用它吗?我想在最后打印一些额外的内容,即使在bu失败时ild失败了。