Gradle傳給虛擬機器的引數

weixin_33860722發表於2017-12-05

轉載自:http://blog.csdn.net/hongweigg/article/details/52980554?locationNum=1&fps=1

Gradle傳給虛擬機器的引數通過-D命令最可靠,例如
gradlew -Dparam.key1=value1
使用ext, -P或systemProp傳遞屬性,經測試,均不能有效傳遞到虛擬機器。

參考:
在專案根目錄下建立名為gradle.properties檔案,在該檔案中定義需要的屬性。這些屬性在Gradle構建Gradle領域物件(即project物件例項)時會被自動加到project物件例項中作為其屬性被直接呼叫。


2764956-b7b372359d0628ba
image

2764956-f72b963a9f667df3
image

定義在build.gradle中的ext塊中。ext準確的說是Gradle領域物件的一個屬性,我們可以將自定義的屬性新增到ext物件上,Build.gradle中的其它程式碼片段可以使用。


2764956-b7cb40eb897a0140
image

從上述可以看到ext物件其實是DefaultExtraPropertiesExtension物件的一個例項。


在命令列中通過-D或者-P給Gradle實時建立屬性。 -D屬性會被傳送給啟動Gradle的jvm,作為一個系統屬性被jvm使用。


2764956-f5dd68bd979f83d4
image

-P屬性則會被直接載入到Gradle領域物件上。


2764956-509788daa57648e2
image

在Gradle配置檔案中建立系統屬性。剛講過在gradle.properties檔案可以建立屬性,同時我們也可以建立系統屬性。如果有systemProp.字首的屬性會被識別為系統屬性。


2764956-85d98a3d7bce81f7
image

將特殊字首的系統屬性或環境變數自動加入到Gradle領域物件中。

如果有環境變數以ORG_GRADLE_PROJECT.為字首,那麼該變數會被自動新增到Gradle領域物件中。同樣,如果有系統屬性以org.gradle.project.為字首,那麼也會被自動加入到Gradl領域物件中。這一特性的目的之一是為了隱藏一些敏感的資訊。比如在執行Gradle指令碼時需要傳入密碼資訊,如果以-P的方式傳送會被別人看到。而把該屬性儲存為環境變數,只有系統管理員才有權訪問和修改。在執行Gralde的時候該環境變數會被自動加入到Gradle物件中被使用,隔離了明暗資料,又不行影響其他使用者使用。(其他使用者可以通過-P方式是設定該屬性)。


2764956-e76b105847c41ab9
image

相關文章