ExtraPropertiesExtension

Gradle 網域物件的額外、臨時屬性。

額外屬性擴充功能允許將新屬性新增至現有的網域物件。它們的作用類似於 Map,允許儲存任意的鍵/值對。所有 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

以 Map 形式傳回所有已註冊的屬性及其目前值。傳回的 Map 與擴充功能分離。也就是說,對 Map 做的任何變更都不會變更其來源的擴充功能。

方法

方法描述
get(name)

傳回具有指定名稱的已註冊屬性的值。當從 Groovy 使用額外屬性擴充功能時,您也可以透過 Groovy 的屬性語法取得屬性。以下所有程式碼行都是等效的。

has(name)

傳回擴充功能是否具有透過指定名稱註冊的屬性。

set(name, value)

更新或建立具有指定名稱的已註冊屬性的值為給定值。當從 Groovy 使用額外屬性擴充功能時,您也可以透過 Groovy 的屬性語法設定屬性。以下所有程式碼行都是等效的。

腳本區塊

沒有腳本區塊

屬性詳細資訊

Map<String, Object> properties (唯讀)

以 Map 形式傳回所有已註冊的屬性及其目前值。傳回的 Map 與擴充功能分離。也就是說,對 Map 做的任何變更都不會變更其來源的擴充功能。

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"