测试是否执行了gradle任务

测试是否执行了gradle任务,gradle,Gradle,我正在使用axion gradle插件,我的目标是测试createRelease任务是否已执行。如果是这样,我想编辑我的项目所依赖的变量。如何测试gradle任务是否已成功执行。我尝试了onlyIf谓词并测试它是否不为null,但后者只测试任务是否存在,而不是任务是否已运行 我想在ext结尾中运行此测试。每个Gradle任务都提供了一个可提供您所需信息的: task a { } task b { onlyIf { a.state.executed } } 如果要检查任务是否确实执行了

我正在使用axion gradle插件,我的目标是测试createRelease任务是否已执行。如果是这样,我想编辑我的项目所依赖的变量。如何测试gradle任务是否已成功执行。我尝试了onlyIf谓词并测试它是否不为null,但后者只测试任务是否存在,而不是任务是否已运行


我想在ext结尾中运行此测试。

每个Gradle任务都提供了一个可提供您所需信息的:

task a { }

task b {
    onlyIf { a.state.executed }
}
如果要检查任务是否确实执行了某些操作(例如,复制任务),也可以使用
a.state.didWork
(或
a.didWork

编辑: 我刚刚注意到,您提到在插件中使用此功能。此用例的一个示例:

project.gradle.buildFinished {
    if (project.tasks['myTask'].state.executed) {
        // do something
    }
}

您需要注册一个在任务事件中收到通知的侦听器,例如。G使用
gradle.taskGraph.postTask{if(it==createRelease){/*do stuff*/}}
。但您不应该更改该侦听器中的Gradle配置。您只应在配置阶段更改配置。当然,该侦听器是在执行阶段运行的


在这种情况下,你应该改变你的策略。G通过执行
gradle.taskGraph.whenReady{if(it.hasTask(createRelease)){/*do stuff*/}
。在配置阶段执行
whenReady
,因此您仍然可以配置任务等等。因此,如果
createRelease
任务将作为当前Gradle执行的一部分运行,那么您就可以使用这行代码来完成这些工作。

谢谢!但是,b.state.executed不应该是a.state.executed吗?太好了。如果执行了一个,我想执行,比如说一个print语句,它会去哪里?我想在ext闭包中运行这个。这个例子还能用吗?我不知道为什么它不能用。但是,我也不知道为什么需要在
ext
闭包中运行它。另外,这超出了这个问题的范围,您可以自己尝试一下。让我们一起来。谢谢您的帮助。我应该在ext闭包中运行它吗?不管在哪里运行它。
ext
闭包只允许您向应用它的对象添加新属性。这与代码无关,因为它只是注册了一个侦听器。不要相信这个答案是正确的。至少目前在Gradle 6.2中,您无法在Ready关闭时检查是否存在带有
的任务。如果您要求在命令行上执行任务,但该任务不存在,则在配置阶段之后,但在调用READY
闭包时,
生成失败。