鉴于下面的“build.gradle”文件,我想确保在调用stopServer
时运行testServerLifecycle
。目前,如果runTestOnServer
任务失败,则构建停止。
如果runTestOnServer
是任务图上的唯一内容,我不想运行stopServer
。
的build.gradle
tast startServer {}
task runTestOnServer {
dependsOn startServer
}
tast stopServer {}
task testServerLifecycle {
dependsOn runTestOnServer
finalizedBy stopServer
}
Gradle是否支持此类功能?我可以做什么来确保在stopServer
位于任务图上时运行testServerLifecycle
?
详情:Gradle 1.9
gradle.taskGraph.afterTask { Task task, TaskState state ->
if (task == runTestOnServer
&& state.failure
&& gradle.taskGraph.getAllTasks().contains(stopServer)) {
println "----------------- Stopping Server -----------------"
tasks.stopServer.execute()
}
}
我无法在'runTestOnServer'任务上使用finalizedBy
,因为当且仅当'stopServer'运行正常时,我才想运行'stopServer';使用finalizedBy
会强制它每次都运行。
应该注意的是,这会在每个任务之后运行。
答案 0 :(得分:2)
由于finalizedBy
不能跨任务传递,因此应直接应用于startServer
任务。我认为这样的事情应该涵盖它:
task startServer { // ...}
task stopServer { // ...}
startServer.finalizedBy('stopServer')
stopServer.mustRunAfter('runTestOnServer')
task runTestOnServer {
dependsOn startServer
// ...
}
或者,您可以使用afterTask
并删除stopServer和testServerLifecycle
gradle.taskGraph.afterTask { Task task, TaskState state ->
if (task == runTestOnServer) {
// clean up, implement stopServer here
}
}
您还可以根据任务的状态制定不同的规则,如下所示:
gradle.taskGraph.afterTask { Task task, TaskState state ->
if (state.failure) {
// Handle the failure
println "$task FAILED!!!"
} else {
println "SUCCESS!!!"
}
}
这应该在每次task
执行后运行。