我在biuld.gradle中有以下代码:
task generateReport(type: Exec){
onlyIf{
project.getState().failure
}
doLast{
executable "generateReport.bat"
}
}
tasks.withType(Test)*.finalizedBy generateReport
我之前尝试过:
task generateReport(type: Exec){
executable "generateReport.bat"
}
tasks.withType(Test)*.finalizedBy generateReport
gradle.afterProject {project, projectState ->
if (projectState.failure) {
doLast{
generateReport
}
}
}
还有其他例子,但都没用。
我做错了什么?
答案 0 :(得分:3)
您需要挂钩buildFinished
生命周期事件,如下所示:
gradle.buildFinished { buildResult ->
if (buildResult.failure) {
println "Build Failed!"
} else {
println "Build Succeeded!"
}
}
答案 1 :(得分:1)
首先,您必须使用其他答案中提到的BuildListener
。但是还有一点需要注意,你不能像generateReport
那样按照你的方式调用某个任务。所以你宁愿在监听器的闭包中使用exec
权限,如:
gradle.buildFinished { buildResult ->
if (buildResult.failure) {
exec {
executable "generateReport.bat"
}
}
}
答案 2 :(得分:0)
Project.state
是项目的评估状态,而不是某些执行状态。如果您想在构建失败时执行某些操作,则应该gradle.addBuildListener()
并在BuildListener
中实现方法buildFinished()
,您可以在其中检查result.failure
以查看构建是否失败。如果要为每个失败的测试尝试执行某些操作,则应使用gradle.addListener()
并为其提供TestListener
的实现,您可以在其中对失败的测试或测试套件执行操作。或者,您也可以仅使用testTask.addTestListener()
将测试侦听器添加到特定测试任务。或者为了让它更好,您可以testTask.afterTest { ... }
或testTask.afterSuite { ... }
。