【发布时间】:2019-10-05 17:29:42
【问题描述】:
我了解 gradle DSL
task doTask { logger.info "some text" }
实际上将调用 Project 委托对象上的方法 task(String,Closure)。这或多或少是一种短手
task("doTaks", {logger.info("some text")})
没关系。但是当我尝试理解我在第三方构建脚本中看到的一些 gradle DSL 语法时,事情变得复杂了:
task doTask (dependsOn: 'otherTask'){logger.info "some text"}
我认为 groovy 会从 (dependsOn: 'otherTask') 创建一个映射,并且以某种方式使用 Project 方法
task(Map args, String name, Closure config)
将被调用。但是这些额外的括号是如何发挥作用的,为什么它们是必要的,groovy 是如何找出我们想要的呢?以我最小的常规技能,语法对我来说完全违反直觉。我永远不会想到我必须这样做才能使其发挥作用。
所以,这就是问题所在:groovy 是如何弄清楚如何处理这个命令的:
task doTask (dependsOn: 'otherTask'){ // some code }
【问题讨论】:
-
groovy 中的 Gradle 构建脚本是 DSL,而不是普通的 groovy
-
@tim_yates:感谢您链接到另一个问题。那里的答案并没有为我的问题添加任何新内容,因此我不会认为它是重复的,尽管差异确实在于细微差别。 Marco R. 下面的回答实际上解决了我的问题。