Gradle 屬性 和 system 屬性

2018-07-01 16:16 更新

Gradle 提供了多種的方法讓您可以在構(gòu)建腳本中添加屬性. 使用 -D 命令選項(xiàng),您可以向運(yùn)行 Gradle 的 JVM 傳遞一個(gè) system 屬性 . Gradle 命令的 -D 選項(xiàng) 和 Java 命令的 -D 選項(xiàng)有些相同的效果.

您也可以使用屬性文件向您的 Project 對(duì)象中添加屬性. 您可以在 Gradle 用戶(hù)目錄( 如果您沒(méi)有在USER_HOME/.gradle 配置默認(rèn)設(shè)置,則由"GRADLE_USER_HOME" 環(huán)境變量定義) 或者項(xiàng)目目錄放置一個(gè) gradle.properties 文件.如果是多項(xiàng)目的話(huà),您可以在每個(gè)子目錄里都放置一個(gè) gradle.properties 文件. gradle.properties 文件內(nèi)容里的屬性能夠被 Project 對(duì)象訪(fǎng)問(wèn)到. 不過(guò)有一點(diǎn),用戶(hù)目錄中的 gradle.properties 文件優(yōu)先權(quán)大于項(xiàng)目目錄中的 gradle.properties 文件.

您也可以通過(guò) -P 命令選項(xiàng)直接向Project 對(duì)象中添加屬性.

另外,當(dāng) Gradle 看到特別命名的 system 屬性或者環(huán)境變量時(shí),Gradle 也可以設(shè)置項(xiàng)目屬性. 比如當(dāng)您沒(méi)有管理員權(quán)限去持續(xù)整合服務(wù),還有您需要設(shè)置屬性值但是不容易時(shí),這個(gè)特性非常有用. 出于安全的原因,在這種情況下,您沒(méi)法使用 -P 命令選項(xiàng),您也不能修改系統(tǒng)級(jí)別的文件. 確切的策略是改變您持續(xù)繼承構(gòu)建工作的配置,增加一個(gè)環(huán)境變量設(shè)置令它匹配一個(gè)期望的模式. 對(duì)于當(dāng)前系統(tǒng)來(lái)說(shuō),這種方法對(duì)于普通用戶(hù)來(lái)說(shuō)是不可見(jiàn)的. [6]

如果環(huán)境變量的名字是 ORG_GRADLE_PROJECT=somevalue, Gradle 會(huì)使用值為 somevalue 在您的 Project 對(duì)象中設(shè)定一個(gè)支持屬性. 另外 Gradle 也支持 system 屬性,但是使用不同的名字模式,例如 org.gradle.project.prop .

您也可以在 gradle.properties 文件中設(shè)置 system 屬性.如果一個(gè)屬性名的前綴為 “systemProp”,那么這個(gè)屬性和它的屬性值會(huì)被設(shè)置為 system 屬性. 如果沒(méi)有這個(gè)前綴,在多項(xiàng)目構(gòu)建中,除了根項(xiàng)目會(huì)被忽略外,“systemProp.” 屬性會(huì)在任何項(xiàng)目中設(shè)置.也就是說(shuō)僅僅根項(xiàng)目的 gradle.properties 文件會(huì)被檢查其屬性的前綴是否是 “systemProp”.

**例子 14.2.通過(guò) gradle.properties 文件設(shè)置屬性

gradle.properties

gradlePropertiesProp=gradlePropertiesValue
sysProp=shouldBeOverWrittenBySysProp
envProjectProp=shouldBeOverWrittenByEnvProp
systemProp.system=systemValue

build.gradle

task printProps << {
    println commandLineProjectProp
    println gradlePropertiesProp
    println systemProjectProp
    println envProjectProp
    println System.properties['system']

}

[6]. Jenkins, Teamcity, or Bamboo 都是 提供這個(gè)功能的 CI 服務(wù).

使用 gradle -q -PcommandLineProjectProp=commandLineProjectPropValue -Dorg.gradle.project.systemProjectProp=systemPropertyValue printProps 輸出

> gradle -q -PcommandLineProjectProp=commandLineProjectPropValue    -Dorg.gradle.project.systemProjectProp=systemPropertyValue printProps
commandLineProjectPropValue
gradlePropertiesValue
systemPropertyValue
envPropertyValue
systemValue


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)