【问题标题】:gradle custom task execution phasegradle 自定义任务执行阶段
【发布时间】:2015-07-13 18:18:49
【问题描述】:

此问题适用于 gradle (>= 2.4)。我想编写如下自定义任务:

https://docs.gradle.org/current/userguide/custom_tasks.html

class GreetingTask extends DefaultTask {
    @TaskAction
    def greet() {
        println 'hello from GreetingTask'
    }
}

task hello(type: GreetingTask)

如何让这个任务在执行阶段运行?正在传递一个空的闭包

<< {

}

唯一的解决方案?

编辑

该任务应该用于具有多个任务作为依赖项的多项目构建中。

我希望命令 gradle build 可以通过说类似

来构建所有项目
`build.dependsOn(hello)`

但似乎任务 hello 在构建的配置阶段被调用。

【问题讨论】:

  • 在我看来是这样的,但我对此了解不多。
  • 没有闭包,执行gradle hello会发生什么?
  • @jaco0646 您正在直接调用任务。我需要在执行阶段而不是配置阶段调用它
  • @iggy 为什么你认为任务是在配置阶段执行的?
  • @iggy 您的问题包含解释该机制的链接。它说:Gradle 将在任务执行时调用该方法。注意措辞。它说“任务执行时”。不是“配置任务时”。因此,使用@TaskAction 注释的方法就是任务在执行阶段所做的事情。它还说:您不必使用方法来定义任务的行为。例如,您可以在任务构造函数中使用闭包调用 doFirst() 或 doLast() 来添加行为。所以这种基于 TaskAction 的机制只是告诉任务执行时要做什么的另一种方式

标签: gradle


【解决方案1】:

将以下内容添加到 build.gradle 文件中:

class GreetingTask extends DefaultTask {
    @TaskAction
    def greet() {
        println 'hello from GreetingTask'
    }
}

task hello(type: GreetingTask) {
    println "This is the configuration phase"

    doFirst {
        println "This is the execution phase"
    }
}

现在执行gradle hello。您将看到的输出是

This is the configuration phase
:hello
This is the execution phase
hello from GreetingTask

BUILD SUCCESSFUL

如您所见,任务的输出发生在doFirst() 之后,这肯定发生在执行阶段。

【讨论】:

  • 感谢您的解释,我在理解 gradle 中的配置阶段如何工作方面存在一些差距
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 2021-12-30
  • 2016-11-10
  • 2021-11-29
  • 1970-01-01
  • 2019-06-07
相关资源
最近更新 更多