Gradle/Groovy语法和关键字

Sch*_*tod 5 groovy gradle

作为Gradle和Groovy的新手,我发现自己很难理解build.gradle脚本的语法.

我理解(至少我认为是这样)build.gradle是用作DSL的普通groovy代码,其中关键字在别处定义.

请解释一下不同的部分.摘自教程:

defaultTasks 'distribution'

task distribution << {
    println "We build the zip with version=$version"
}

task release(dependsOn: 'distribution') << {
    println 'We release now'
}

gradle.taskGraph.whenReady {taskGraph ->
    if (taskGraph.hasTask(release)) {
        version = '1.0'
    } else {
        version = '1.0-SNAPSHOT'
    }
}
Run Code Online (Sandbox Code Playgroud)

我想我知道println是一个功能.我知道引号中的文字是一个字符串.我想花括号中的东西是封闭的.但什么是发布/*发行*?它也是一个字符串吗?它是函数任务的参数吗?为什么我可以在hasTask(release)中使用它而不带引号?

那么exacly 什么:'defaultTasks','task','release','<<','gradle','whenReady',' - >'?

额外奖励:有没有一种常规方法可以找到自己?

JBa*_*uch 5

一般来说,你不应该关心。这是一种 DSL,其中诸如“函数任务的参数”之类的术语不应该打扰您。您应该知道添加新任务是task taskName.

如果您真的想深入研究(例如扩展 Gradle、实现插件等),Gradle DSL 文档是您的朋友。从那里,您可以了解到这taskProjectobject上的一种方法

  • 感谢您及时回复。但我认为“不在乎”并不令人满意。我认为理解基本原理是理解如何使用某些东西的基础。至少从程序员的角度来看。例如,我不想记住我必须使用引号 *here* 而不是 *there*,但我想知道 *this stuff* 是一个函数声明,因此在 *that stuff* 需要时不需要它们一个字符串参数,而 *that other stuff* 接受一个字符串,但会自动转换......等等。 (2认同)