Gradle groovy中这个看起来像闭包的代码意味着什么?

Gradle groovy中这个看起来像闭包的代码意味着什么?,gradle,groovy,closures,Gradle,Groovy,Closures,我正在一个新项目中试用一些gradle,在它的设置.gradle文件中,我看到了几行我无法理解的内容,比如groovy结构或语言功能是什么,它做什么以及如何工作: plugins { id "com.gradle.build-scan" version "1.12.1" id "cz.malohlava" version "1.0.3" } buildScan { server = "some.host.com" publishAlways() } 我怀疑这是一个闭包

我正在一个新项目中试用一些gradle,在它的设置.gradle文件中,我看到了几行我无法理解的内容,比如groovy结构或语言功能是什么,它做什么以及如何工作:

plugins {
  id "com.gradle.build-scan" version "1.12.1"
  id "cz.malohlava"     version "1.0.3"
}

buildScan {
  server = "some.host.com"
  publishAlways()
}
我怀疑这是一个闭包或某种接口,但无法理解

理解以下内容的任何帮助都将是巨大的帮助:

  • 它是干什么的
  • 从语言的角度来看,插件和buildScan是如何工作的

从语言的角度来看,闭包是在构建脚本之外的另一个对象的上下文中执行的。这在Groovy中称为委托

插件
委托


buildScan
委托构建扫描插件的扩展对象,该对象配置插件。

这里可能有一些我不理解的技巧,特别是在API文档中找不到
plugins()
buildScan()
。尽管如此,以下是对语法含义的合理解读

  • plugins{}
    buildScan{}
    都是以闭包(请参阅其他答案以了解其解释)作为参数的方法

  • 每个闭包都有一个特定类型的委托对象,根据使用闭包的方法不同,即
    plugins()
    的委托与
    buildScan()的委托类型不同

  • 在闭包中,将对委托对象执行非限定的方法和属性。因此,对于
    plugins{}
    块,将针对其委托调用
    id(…).version(…)
    。对于
    buildScan{}
    ,您正在委托上设置属性
    server
    ,并调用其
    publishAlways()
    方法


  • 老实说,我不知道上面的信息对使用和理解Gradle有多有用,但我认为这正是你想要的。希望有帮助

    存在一些有助于理解的现有问题,即。