如何仅在构建失败后才在 gradle 中执行任务
How to execute a task in gradle only after build failed
我在 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
}
}
}
还有其他例子,但都没有用..
我做错了什么?
您需要挂接到 buildFinished
生命周期事件,如下所示:
gradle.buildFinished { buildResult ->
if (buildResult.failure) {
println "Build Failed!"
} else {
println "Build Succeeded!"
}
}
Project.state
是项目的评估状态,不是某种执行状态。如果你想在构建失败时做一些事情,你应该做 gradle.addBuildListener()
并在 BuildListener
中实现方法 buildFinished()
,你可以在其中检查 result.failure
以查看构建是否失败.如果你想对每个失败的测试尝试执行一些操作,你应该使用 gradle.addListener()
并给它一个 TestListener
的实现,你可以在其中对失败的测试或测试套件执行操作。或者,您也可以使用 testTask.addTestListener()
将测试侦听器仅添加到特定的测试任务。或者为了让它更好,你可以做 testTask.afterTest { ... }
或 testTask.afterSuite { ... }
.
首先,您必须使用 BuildListener
,因为它已经在其他答案中提到过。但请注意,您不能像 generateReport
那样调用某些任务。所以你宁愿在监听器的闭包中使用 exec
,如:
gradle.buildFinished { buildResult ->
if (buildResult.failure) {
exec {
executable "generateReport.bat"
}
}
}
我在 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
}
}
}
还有其他例子,但都没有用..
我做错了什么?
您需要挂接到 buildFinished
生命周期事件,如下所示:
gradle.buildFinished { buildResult ->
if (buildResult.failure) {
println "Build Failed!"
} else {
println "Build Succeeded!"
}
}
Project.state
是项目的评估状态,不是某种执行状态。如果你想在构建失败时做一些事情,你应该做 gradle.addBuildListener()
并在 BuildListener
中实现方法 buildFinished()
,你可以在其中检查 result.failure
以查看构建是否失败.如果你想对每个失败的测试尝试执行一些操作,你应该使用 gradle.addListener()
并给它一个 TestListener
的实现,你可以在其中对失败的测试或测试套件执行操作。或者,您也可以使用 testTask.addTestListener()
将测试侦听器仅添加到特定的测试任务。或者为了让它更好,你可以做 testTask.afterTest { ... }
或 testTask.afterSuite { ... }
.
首先,您必须使用 BuildListener
,因为它已经在其他答案中提到过。但请注意,您不能像 generateReport
那样调用某些任务。所以你宁愿在监听器的闭包中使用 exec
,如:
gradle.buildFinished { buildResult ->
if (buildResult.failure) {
exec {
executable "generateReport.bat"
}
}
}