Gradle學習之自己定義屬性


請通過下面方式下載本系列文章的Github演示樣例代碼:
git clone https://github.com/davenkin/gradle-learning.git
 
 
在前面的文章中我們講到,設置和讀取Project的Property是使用Gradle的一個非常重要的方面。比方。非常多Plugin都會向Project中增加額外的Property,在使用這些Plugin時,我們須要對這些Property進行賦值。
 
Gradle在默認情況下已經為Project定義了非常多Property,當中比較經常使用的有:
project:Project本身
name:Project的名字
path:Project的絕對路徑
description:Project的描寫敘述信息
buildDir:Project構建結果存放文件夾
version:Project的版本
 
下面。我們首先設置Project的version和description屬性。再定義showProjectProperties以打印這些屬性:
 
version = 'this is the project version'
description = 'this is the project description'
task showProjectProperties << {
  println version
  println project.description
}
 
請注意。在打印description時,我們使用了project.description,而不是直接使用description。

原因在於,Project和Task都擁有description屬性。而定義Task的閉包將delegate設置成了當前的Task。故假設直接使用description。此時打印的是showProjectProperties的description。而不是Project的,所以我們須要顯式地指明project。有關delegate的很多其它知識,請參考本系列的這篇文章。


 
Gradle還為我們提供了多種方法來自己定義Project的Property。


 
(1)在build.gradle文件里定義Property
在build.gradle文件里向Project加入額外的Property時。我們並不能直接定義,而是應該通過ext來定義。假設要加入一個名為property1的Property,我們應該:
 
ext.property1 = "this is property1"
 
另外。我們也能夠通過閉包的方式:
 
ext {   property2 = "this is property2"}
 
在定義了Property后。使用這些Property時我們則不須要ext,而是能夠直接訪問:
 
task showProperties << {
  println property1
  println property2
}
 
其實,不論什么實現了ExtensionAware接口的Gradle對象都能夠通過這樣的方式來加入額外的Property,比方Task也實現了該接口。
 
(2)通過命令行參數定義Property
Gradle還提供了-P命令行參數來設置Property,比方:
 
task showCommandLieProperties << {
  println property3
}
 
在運行“gradle showCommandLieProperties”時,終端輸出例如以下:
 
* What went wrong:Execution failed for task ':showCommandLieProperties'.> Could not find property 'property3' on task ':showCommandLieProperties'.
 
表示property3並沒有被定義。在調用gradle命令時,通過-P參數傳入該Property:
 
gradle -Pproperty3="this is property3" showCommandLieProperties
 
此時終端顯示:
 
:showCommandLiePropertiesthis is property3BUILD SUCCESSFUL
 
(3)通過JVM系統參數定義Property
我們知道。在java中。我們能夠通過-D參數定義JVM的系統參數。然后在代碼中能夠能夠通過System.getProperty()進行獲取。

在Gradle中。我們也能夠通過-D的方式向Project傳Property。僅僅是此時我們須要遵循一些約定:每個通過-D方式聲明的Property都須要以“org.gradle.project”為前綴。對於上面的showCommandLieProperties。我們也能夠通過下面方式
設置property3:
 
gradle -Dorg.gradle.project.property3="this is another property3" showCommandLieProperties
 
(4)通過設置環境變量Property
我們還能夠通過環境變量設置的方式設置Project的Property。這樣的方式和(3)一樣,須要我們遵循一些約定:在定義環境變量時,每個Property都須要以“ORG_GRADLE_PROJECT_”為前綴:
 
export ORG_GRADLE_PROJECT_property3="this is yet another property3"
 
在調用showCommandLieProperties時,我們便不須要傳入命令行參數了:
 
gradle showCommandLieProperties
 
在筆者所工作的項目中。我們的持續集成server便是通過這樣的方式為Gradle設置Property的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM