如何仅在生成失败后在gradle中执行任务

如何仅在生成失败后在gradle中执行任务,gradle,allure,Gradle,Allure,我在biuld.gradle中有以下代码: task generateReport(type: Exec){ onlyIf{ project.getState().failure } doLast{ executable "generateReport.bat" } } tasks.withType(Test)*.finalizedBy generateReport 我以前试过: task generateReport(type

我在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!"
    }
}

您需要钩住
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{…}
项目。状态
是项目的评估状态,而不是某些执行状态。如果要在生成失败时执行某些操作,则应执行
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"
        }
    }
}

首先,您必须使用
BuildListener
,正如其他答案中已经提到的那样。但还有一点需要注意的是,使用
generateReport
,您不能以调用某个任务的方式调用它。因此,您必须在侦听器的闭包中使用一个
exec
,如下所示:

gradle.buildFinished { buildResult ->
    if (buildResult.failure) {
        exec {
            executable "generateReport.bat"
        }
    }
}

事实上,你的例子不适用于执行任务,我把它绑在一起了。事实上,你的例子不适用于执行任务,我把它绑在一起了,你的例子真的很有帮助:)谢谢,你的例子真的很有帮助:)