Gradle中TaskExecutionGraph.beforeTask/afterTask已废弃,如何替代?
替代废弃的
gradle.taskGraph.beforeTask的方案 Gradle中gradle.taskGraph.beforeTask已被废弃,可根据需求选择以下两种替代方案:
方案一:全局监听所有任务执行前事件(替代全局beforeTask)
使用TaskExecutionListener注册全局监听器,监听所有任务的执行前事件,行为与原beforeTask一致:
afterEvaluate { gradle.taskGraph.addTaskExecutionListener(new TaskExecutionListener() { @Override void beforeExecute(Task task) { // 原beforeTask中的业务逻辑迁移至此 println "即将执行任务:${task.name}" } @Override void afterExecute(Task task, TaskState state) { // 若需处理任务执行后的逻辑,可在此实现 } }) }
方案二:针对特定任务/任务类型添加前置逻辑
如果无需全局监听,仅需对特定任务或任务类型执行前置逻辑,直接使用doFirst闭包更高效:
// 针对单个指定任务 tasks.named("compileDebugJavaWithJavac") { doFirst { println "compileDebugJavaWithJavac任务即将执行" } } // 针对某一类任务(例如所有Java编译任务) tasks.withType(JavaCompile) { doFirst { println "Java编译任务即将执行" } }
方案选择建议
- 需全局统一处理所有任务前置逻辑:选方案一
- 仅需针对特定任务/任务类型处理:选方案二,避免全局监听的不必要开销
内容的提问来源于stack exchange,提问作者Vlad Alexeev
相关产品推荐
相关产品推荐

