【问题标题】:what does this closure looking code in groovy means?这个在 groovy 中看起来像闭包的代码是什么意思?
【发布时间】:2018-09-24 09:37:28
【问题描述】:

我正在一个新项目中尝试一些 gradle,在它的 settings.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()
}

我怀疑它是 closure 或某种类型的 interface,但无法制作它的头或尾。

对理解以下内容的任何帮助都会有很大帮助:

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

【问题讨论】:

标签: gradle groovy closures


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 2011-05-28
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多