Gradle 屬性 和 system 屬性

2018-07-01 16:16 更新

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

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

您也可以通過 -P 命令選項直接向Project 對象中添加屬性.

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

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

您也可以在 gradle.properties 文件中設置 system 屬性.如果一個屬性名的前綴為 “systemProp”,那么這個屬性和它的屬性值會被設置為 system 屬性. 如果沒有這個前綴,在多項目構建中,除了根項目會被忽略外,“systemProp.” 屬性會在任何項目中設置.也就是說僅僅根項目的 gradle.properties 文件會被檢查其屬性的前綴是否是 “systemProp”.

**例子 14.2.通過 gradle.properties 文件設置屬性

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 都是 提供這個功能的 CI 服務.

使用 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


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號