我正在一个新项目中尝试一些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()
。尽管如此,以下是对语法含义的合理解读。
plugins {}
和buildScan {}
都是将闭包(有关此解释,请参阅其他答案)作为参数的方法。
每个闭包都有一个特定类型的委托对象,该对象因使用闭包的方法而异,即
plugins()
的委托与buildScan()
的委托属于不同的类型在闭包中,将对委托对象执行非限定的方法和属性。因此,对于
plugins {}
块,id(...).version(...)
将被调用反对其委托。对于buildScan {}
,您将在委托上设置属性server
并调用其publishAlways()
方法。
老实说,我不知道上述信息对于使用和理解 Gradle 有多大用处,但我认为这就是您的要求。希望对您有所帮助!