Project對象
Project屬性
1. 訪問屬性
Gradle執(zhí)行項目的build文件(build.gradle)杈湾,生成一個Project對象蚌吸。你寫的腳本所使用的屬性和方法都會被委托給這個Project對象给涕。我們能夠在我們的腳本中直接使用Project的屬性和方法侣集。
例子:
name="Hello" //委托給Project.name
reportsDir = file('reports') //委托給Project.file()
2. 屬性域
一個Project具有5個屬性域(scope),通過屬性域可以很方便地訪問屬性。以下是5個屬性域:
- Project固有屬性域
這個屬性域中包含Project實現(xiàn)類中聲明的屬性的getters和setters。例如,Project.getRootProject()表示訪問rootProject屬性竭鞍。這些屬性是否可讀可寫取決于它們的getter或setter是否存在。 - 擴展屬性域(Extra Properties)
每個project都維護者一個擴展屬性的map候衍,這個map可以包含任意的鍵值對笼蛛。 - 插件的擴展屬性域
- convention properties(貌似也是一個由插件擴展出的屬性域洒放,從官方文檔中沒看懂介個是什么意思蛉鹿,懂得兄弟可以解釋下)
- project的tasks域
一個task可以通過task的name直接訪問。這個域中的屬性都是只讀的往湿。
屬性讀寫方式:
讀屬性或?qū)憣傩詴r妖异,project都會按順序從上述域中搜索惋戏,在搜索到的第一個域中讀出或?qū)懭搿?/p>
3. Extra Properties
所有的Extra Properties必須通過"ext"命名空間來定義,即定義的時候加前綴"ext."他膳。一旦一個屬性通過這種方式定義后响逢,在該project下(包含其子工程sub-projects)可以直接訪問。
示例代碼
//初始化需要"ext."
println "init"
project.ext.prop1 = 'hello'
task doStuff{
println "doStuff Start"
//再次訪問不需要前綴
println prop1
prop1 = 'doStuff_hello'
println "doStuff End"
}
allprojects{
println prop1
}
結(jié)果
init
doStuff Start
hello
doStuff End
doStuff_hello