【问题标题】:Gradle / Groovy Syntax and keywordsGradle / Groovy 语法和关键字
【发布时间】: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;

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

【问题讨论】:

  • 杰亚。这是同一个问题。同样的意图。 (甚至对“字符串”也有同样的困惑)。从技术上讲,另一个是重复的,因为它比它小 8 个月。但是没关系。至少他/她得到了一个有用的答案。

标签: groovy gradle


【解决方案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 语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    相关资源
    最近更新 更多