【问题标题】:Groovy syntax on Gradle task exampleGradle 任务示例上的 Groovy 语法
【发布时间】:2017-09-20 09:29:16
【问题描述】:

我对 Groovy 非常感兴趣,但最近才开始使用它,也想从语言语法 POV 中理解 Gradle。

我的例子是关于 Gradle 任务的:

task hello(type: GreetingTask)

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

task 方法接受一个字符串名称和一个闭包。 hello(type: GreetingTask)怎么会突然变成字符串?如果type 是一个命名参数,那么GreetingTask 是什么意思?它是GreetingTask.class 的快捷方式吗? hello 函数/闭包怎么会返回一个字符串?

【问题讨论】:

  • Gradle 构建脚本是一种 DSL,而不仅仅是纯粹的 groovy
  • 是的,但它似乎符合 groovy 语法。除了我所问的,到目前为止,从常规语法 POV 来看,其他一切都是有意义的。
  • 我不知道还能说什么... Gradle 构建脚本是 DSL,而不仅仅是纯粹的 groovy...
  • hello 可以解释为 String 由于使用了编译器插件 gradle。请参阅stackoverflow.com/questions/12326264中的答案

标签: gradle groovy


【解决方案1】:

正如 Tim 所指出的,gradle 脚本是用特定的 DSL 编写的,这不是纯粹的 groovy。在创建任务here 时,您可以看到用于创建任务的方法,并且在后台调用它们来创建任务。当然,在后台这个调用被委托给TaskContainer,但是由于scopes 和提到的DSL,不需要调用project.tasks.task。现在,您提供的代码是如何创建任务实例的?带this 变压器。我知道这个答案远远不够,但希望它有所帮助;)

type: GreetingTaskMap 的一个实例(相当于[type: reetingTask]),是的,在groovy 中.class 在引用类时可以省略。

【讨论】:

    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2016-12-02
    相关资源
    最近更新 更多