Project對象
Project屬性
1. 訪問屬性
Gradle執(zhí)行項(xiàng)目的build文件(build.gradle),生成一個(gè)Project對象。你寫的腳本所使用的屬性和方法都會被委托給這個(gè)Project對象。我們能夠在我們的腳本中直接使用Project的屬性和方法。
例子:
name="Hello" //委托給Project.name
reportsDir = file('reports') //委托給Project.file()
2. 屬性域
一個(gè)Project具有5個(gè)屬性域(scope),通過屬性域可以很方便地訪問屬性。以下是5個(gè)屬性域:
- Project固有屬性域
這個(gè)屬性域中包含Project實(shí)現(xiàn)類中聲明的屬性的getters和setters。例如,Project.getRootProject()表示訪問rootProject屬性。這些屬性是否可讀可寫取決于它們的getter或setter是否存在。 - 擴(kuò)展屬性域(Extra Properties)
每個(gè)project都維護(hù)者一個(gè)擴(kuò)展屬性的map,這個(gè)map可以包含任意的鍵值對。 - 插件的擴(kuò)展屬性域
- convention properties(貌似也是一個(gè)由插件擴(kuò)展出的屬性域,從官方文檔中沒看懂介個(gè)是什么意思,懂得兄弟可以解釋下)
- project的tasks域
一個(gè)task可以通過task的name直接訪問。這個(gè)域中的屬性都是只讀的。
屬性讀寫方式:
讀屬性或?qū)憣傩詴r(shí),project都會按順序從上述域中搜索,在搜索到的第一個(gè)域中讀出或?qū)懭搿?/p>
3. Extra Properties
所有的Extra Properties必須通過"ext"命名空間來定義,即定義的時(shí)候加前綴"ext."。一旦一個(gè)屬性通過這種方式定義后,在該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