API 文档 | ExtraPropertiesExtension |
---|
用于 Gradle 领域对象的额外、临时的属性。
额外属性扩展允许向现有的领域对象添加新属性。它们的作用类似于映射,允许存储任意键值对。所有 ExtensionAware
的 Gradle 领域对象都固有地拥有一个名为 "ext
" 的此类扩展。
额外属性扩展的一个重要特性是,它的所有属性都可以通过拥有该扩展的 ExtensionAware
对象进行读写访问。
project.ext.set("myProp", "myValue") assert project.myProp == "myValue" project.myProp = "anotherValue" assert project.myProp == "anotherValue" assert project.ext.get("myProp") == "anotherValue"
额外属性扩展对象支持 Groovy 属性语法。也就是说,可以通过 extension.«name»
读取属性,并通过 extension.«name» = "value"
设置属性。 在可能的情况下,应优先使用 Groovy 属性语法,而不是 ExtraPropertiesExtension.get(java.lang.String)
和 ExtraPropertiesExtension.set(java.lang.String, java.lang.Object)
方法。
project.ext { myprop = "a" } assert project.myprop == "a" assert project.ext.myprop == "a" project.myprop = "b" assert project.myprop == "b" assert project.ext.myprop == "b"
您还可以使用 Groovy 访问器语法来获取和设置额外属性扩展上的属性。
project.ext["otherProp"] = "a" assert project.otherProp == "a" assert project.ext["otherProp"] == "a"
尝试获取不存在的属性值时抛出的异常因是否使用 Groovy 语法而异。如果使用 Groovy 属性语法,将抛出 Groovy 的 MissingPropertyException
。使用 ExtraPropertiesExtension.get(java.lang.String)
方法时,将抛出 UnknownPropertyException
。
属性 | 描述 |
properties | 返回所有已注册属性及其当前值作为映射。返回的映射与扩展是分离的。也就是说,对映射进行的任何更改都不会改变其来源的扩展。 |
返回所有已注册属性及其当前值作为映射。返回的映射与扩展是分离的。也就是说,对映射进行的任何更改都不会改变其来源的扩展。
project.version = "1.0" assert project.hasProperty("version") assert project.ext.properties.containsKey("version") == false project.ext.foo = "bar" assert project.ext.properties.containsKey("foo") assert project.ext.properties.foo == project.ext.foo assert project.ext.properties.every { key, value -> project.properties[key] == value }
返回具有给定名称的已注册属性的值。当在 Groovy 中使用额外属性扩展时,您还可以通过 Groovy 的属性语法获取属性。以下所有代码行都是等效的。
project.ext { foo = "bar" } assert project.ext.get("foo") == "bar" assert project.ext.foo == "bar" assert project.ext["foo"] == "bar" assert project.foo == "bar" assert project["foo"] == "bar"
使用第一种形式时,如果扩展没有名为 "foo
" 的属性,将抛出 UnknownPropertyException
异常。使用第二种形式(即 Groovy 表示法)时,将抛出 Groovy 的 MissingPropertyException
。
boolean
has
(String
name)
返回扩展是否通过给定名称注册了属性。
assert project.ext.has("foo") == false assert project.hasProperty("foo") == false project.ext.foo = "bar" assert project.ext.has("foo") assert project.hasProperty("foo")
更新(或创建)具有给定名称的已注册属性的值为给定值。当在 Groovy 中使用额外属性扩展时,您还可以通过 Groovy 的属性语法设置属性。以下所有代码行都是等效的。
project.ext.set("foo", "bar") project.ext.foo = "bar" project.ext["foo"] = "bar" // Once the property has been created via the extension, it can be changed by the owner. project.foo = "bar" project["foo"] = "bar"