Groovy中的这种闭包外观代码是什么意思?



我正在一个新项目中尝试一些gradle,在其settings.gradle文件中,我看到这几行我无法理解它是什么时髦的结构或语言功能,它做什么以及它是如何工作的:

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 中称为委派。

http://groovy-lang.org/closures.html#_delegation_strategy

plugin代表参加 https://docs.gradle.org/current/dsl/org.gradle.plugin.use.PluginDependenciesSpec.html

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

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

  1. plugins {}buildScan {}都是将闭包(有关此解释,请参阅其他答案)作为参数的方法。

  2. 每个闭包都有一个特定类型的委托对象,该
  3. 对象因使用闭包的方法而异,即plugins()委托buildScan()的委托属于不同的类型

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

老实说,我不知道上述信息对于使用和理解 Gradle 有多大用处,但我认为这就是您的要求。希望对您有所帮助!

最新更新