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)
中使用不带引号的呢?
那么究竟是什么:defaultTasks
、task
、release
、<<
、gradle
、whenReady
、->
?
奖励:有没有一种非常棒的方法可以发现自己?
【问题讨论】:
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()->
是闭包的核心 groovy 语法。
【讨论】:
以上是关于Gradle / Groovy 语法和关键字的主要内容,如果未能解决你的问题,请参考以下文章
Gradle基础知识-Wrapper,Daeman;Groovy闭包语法