Gradle / Groovy 语法和关键字

Posted

技术标签:

【中文标题】Gradle / Groovy 语法和关键字【英文标题】:Gradle / Groovy Syntax and keywords 【发布时间】:2014-05-13 10:04:42 【问题描述】:

作为 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'
    

例如我想我知道 println 是一个函数。我知道引号中的文本是一个字符串。我猜花括号里的东西是一个闭包。 但是release/distribution 是什么?也是一个字符串吗?它是函数task 的参数吗?还有为什么我可以在hasTask(release)中使用不带引号的呢?

那么究竟是什么defaultTaskstaskrelease&lt;&lt;gradlewhenReady-&gt;

奖励:有没有一种非常棒的方法可以发现自己?

【问题讨论】:

Understanding the groovy syntax in a gradle task definition的可能重复 杰亚。这是同一个问题。同样的意图。 (甚至对“字符串”也有同样的困惑)。从技术上讲,另一个是重复的,因为它比它小 8 个月。但是没关系。至少他/她得到了一个有用的答案。 【参考方案1】:

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

如果你真的想深入研究(例如,为了扩展 Gradle、实现插件等)Gradle DSL docs 是你的朋友。从那里,您可以了解到task is a method on Project object。

【讨论】:

从技术上讲,Gradle 构建语言是一种使用 Groovy 编译时和运行时元编程实现的领域特定语言 (DSL)。您可以在Gradle Build Language Reference 中了解如何使用 DSL(但不了解它是如何实现的)。 感谢您的快速回答。但我认为“不在乎”并不令人满意。我认为理解基本原理是理解如何使用某物的基础。至少从程序员的角度来看。例如。我不想记住我必须使用引号 here 而不是 there,但我想知道 this stuff 是一个函数声明,因此不需要它们,而 that stuff 采用字符串参数,而 that other stuff 采用字符串但自动转换...等等。【参考方案2】:

但什么是发布/分发?也是一个字符串吗?它是函数任务的参数吗?还有为什么不用引号可以在hasTask(release)中使用呢?

这些是 Gradle 中的字符串,但不是香草 Groovy。 this response中提到了这一点

那么究竟是什么:'defaultTasks'、'task'、''?

这些主要是方法或字段。 字段:

project.defaultTasks project.gradle

方法:

project.task() task.whenReady() task.leftShift()

-&gt; 是闭包的核心 groovy 语法。

【讨论】:

以上是关于Gradle / Groovy 语法和关键字的主要内容,如果未能解决你的问题,请参考以下文章

轻松理解gradle配置和Groovy语法

理解 gradle 任务定义中的 groovy 语法

Gradle入门之Groovy语法

Gradle基础知识-Wrapper,Daeman;Groovy闭包语法

Android 根目录下和应用目录下的build.gradle的详解,以及groovy语法的讲解

Groovy 和 Gradle