这个闭包在groovy中的代码是什么意思?

时间:2018-04-14 01:11:49

标签: gradle groovy closures

我正在尝试一个新项目的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的工作原理是什么?

2 个答案:

答案 0 :(得分:3)

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

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

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

buildScan委托Build Scan Plugin的扩展对象来配置插件。

答案 1 :(得分:2)

这里可能有些技巧我不明白,特别是因为我无法在API文档中找到.card { position: relative; width: 180px; height: 180px; } plugins()。尽管如此,以下是对语法含义的合理解读。

  1. buildScan()plugins {}都是方法,它们将一个闭包(请参阅其他答案以解释此问题)作为参数。

  2. 每个闭包都有一个特定类型的委托对象,这取决于使用闭包的方法,即buildScan {}的委托将是一个plugins()

  3. 代表的不同类型
  4. 在闭包内,将对委托对象执行非限定方法和属性。因此,对于buildScan()块,将针对其委托调用plugins {}。对于id(...).version(...),您需要在代理上设置属性buildScan {}并调用其server方法。

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