gradle - Gradle的TaskExecutionListener和TaskActionListener之间有什么区别?

标签 gradle

最佳答案

执行任务时,它不仅执行 Action -而且,如果任务是最新的,则根本不执行 Action 。

考虑以下脚本,其中我们有两个任务,每个任务有两个 Action 以及一个outputs.upToDateWhen闭包。任务a永远不会被认为是最新的,而任务b总是被认为是最新的:

task a {
    outputs.upToDateWhen { println "a - upToDateWhen"; false }
    doLast { println "a.1" }
    doLast { println "a.2" }
}

task b {
    outputs.upToDateWhen { println "b - upToDateWhen"; true }
    doLast { println "b.1" }
    doLast { println "b.2" }
}

gradle.addListener(new TaskExecutionListener() {
    void beforeExecute(Task task) {
        println "beforeExecute of $task"
    }
    void afterExecute(Task task, TaskState state) {
        println "afterExecute of $task"
    }
})

gradle.addListener(new TaskActionListener() {
    void beforeActions(Task task) {
        println "beforeActions of $task"
    }
    void afterActions(Task task) {
        println "afterActions of $task"
    }
})

gradle a b的第一次调用上,您将获得以下输出:
$ gradle a b
:a
beforeExecute of task ':a'
a - upToDateWhen
beforeActions of task ':a'
a.1
a.2
afterActions of task ':a'
afterExecute of task ':a'
:b
beforeExecute of task ':b'
b - upToDateWhen
beforeActions of task ':b'
b.1
b.2
afterActions of task ':b'
afterExecute of task ':b'

由于这是第一次执行,因此将执行两个任务的 Action 。不过,您仍然可以看到TaskExecutionListener.beforeExecuteupToDateWhen检查之前被调用,而TaskActionListener.beforeActions在检查之后被调用。

在第二次执行时,它变得更加有趣:
$ gradle a b
:a
beforeExecute of task ':a'
a - upToDateWhen
beforeActions of task ':a'
a.1
a.2
afterActions of task ':a'
afterExecute of task ':a'
:b
beforeExecute of task ':b'
b - upToDateWhen
:b UP-TO-DATE
afterExecute of task ':b'

在这里您可以注意到,两个任务都调用了TaskExecutionListener方法,而任务b没有调用TaskActionListener方法,因为该任务被认为是最新的,并且其 Action 被跳过。

关于gradle - Gradle的TaskExecutionListener和TaskActionListener之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22455166/

相关文章:

git - 自定义Gradle任务失败-找不到GitPush

java - 当我实现 android.gms :play-services-ads:19. 3.0 时,为什么我的 android 应用程序崩溃

android - 有不可恢复的,必须先纠正

java - 使用gson gradle从JSON读取键和值

java - 如何在 Gradle 中查看我的依赖包的所有类名?

java - 默认情况下,Gradle Checkstyle 插件与 Google Checks 不兼容

windows - 无法从Windows 10上的Gradle构建脚本执行Git命令

java - Gradle 构建错误 java.lang.IllegalArgumentException

java - Gradle 构建错误

git - 复合构建的存储库设置