我正在使用axion gradle插件,我的目标是测试createRelease任务是否已经执行。如果是,我想编辑我的项目依赖的变量。我如何测试gradle任务是否已经成功执行。我尝试了onlyIf predicate 并测试它是否not null,但后者只测试任务是否存在,而不是是否运行。我想在ext闭包中运行此测试。
44u64gxh1#
每个Gradle任务都提供了一个TaskState,它提供了您所需的信息:
TaskState
task a { } task b { onlyIf { a.state.executed } }
你也可以使用a.state.didWork(或a.didWork),如果你想检查任务是否真的做了一些事情(例如Copy任务)。
a.state.didWork
a.didWork
Copy
**编辑:**我刚刚注意到,你提到在插件中使用此功能。此用例的一个示例:
project.gradle.buildFinished { if (project.tasks['myTask'].state.executed) { // do something } }
uhry853o2#
您需要注册一个在任务事件时通知的监听器,例如使用gradle.taskGraph.afterTask { if (it == createRelease) { /* do stuff */ } }。但您不应该在该监听器中更改Gradle配置。您应该只在配置阶段更改配置。该监听器当然在执行阶段运行。在这种情况下,您应该改变策略,例如执行gradle.taskGraph.whenReady { if (it.hasTask(createRelease)) { /* do stuff */ } }。whenReady是在配置阶段完成的,因此您仍然可以配置任务等。因此,如果createRelease任务将作为当前Gradle执行的一部分运行,则可以使用这一行。
gradle.taskGraph.afterTask { if (it == createRelease) { /* do stuff */ } }
gradle.taskGraph.whenReady { if (it.hasTask(createRelease)) { /* do stuff */ } }
whenReady
createRelease
2条答案
按热度按时间44u64gxh1#
每个Gradle任务都提供了一个
TaskState
,它提供了您所需的信息:你也可以使用
a.state.didWork
(或a.didWork
),如果你想检查任务是否真的做了一些事情(例如Copy
任务)。**编辑:**我刚刚注意到,你提到在插件中使用此功能。此用例的一个示例:
uhry853o2#
您需要注册一个在任务事件时通知的监听器,例如使用
gradle.taskGraph.afterTask { if (it == createRelease) { /* do stuff */ } }
。但您不应该在该监听器中更改Gradle配置。您应该只在配置阶段更改配置。该监听器当然在执行阶段运行。在这种情况下,您应该改变策略,例如执行
gradle.taskGraph.whenReady { if (it.hasTask(createRelease)) { /* do stuff */ } }
。whenReady
是在配置阶段完成的,因此您仍然可以配置任务等。因此,如果createRelease
任务将作为当前Gradle执行的一部分运行,则可以使用这一行。