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

以映射形式返回所有已注册的属性及其当前值。返回的映射与扩展分离。也就是说,对映射所做的任何更改都不会更改其来源的扩展。

方法

方法描述
get(name)

返回具有给定名称的已注册属性的值。当从 Groovy 中使用额外属性扩展时,您还可以通过 Groovy 的属性语法获取属性。以下所有代码行都是等效的。

has(name)

返回扩展是否通过给定名称注册了属性。

set(name, value)

更新或创建具有给定名称的已注册属性的值为给定值。当从 Groovy 中使用额外属性扩展时,您还可以通过 Groovy 的属性语法设置属性。以下所有代码行都是等效的。

脚本块

没有脚本块

属性详情

Map<String, Object> 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 }

方法详情

Object get(String name)

返回具有给定名称的已注册属性的值。当从 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")

void set(String name, Object value)

更新或创建具有给定名称的已注册属性的值为给定值。当从 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"