Gradle配置中subprojects 和 allprojects 的區別
阿新 • • 發佈:2018-12-24
subprojects 和 allprojects 的區別,先給出結論,然後通過一個例子來佐證結論。
結論:allprojects是對所有project的配置,包括Root Project。而subprojects是對所有Child Project的配置
- 舉個例子:
新建一個test_gradle的資料夾,在資料夾裡新建build.gradle和settings.gradle檔案,另外再新建兩個資料夾,名字分別為app
lib
,如下圖所示:
在settings.gradle中寫入:
include ':app',':lib'
在build.gradle中寫入:
allprojects {
tasks.create('hello') {
doLast {
task ->
print "project name is $task.project.name \n"
}
}
}
測試一下allprojects的範圍,開啟控制檯,並切換到新建的根目錄,執行gradle -q hello
命令,執行結果:
bogon:test_gradle mq$ gradle -q hello project name is test_gradle project name is app project name is lib
再來測試下subprojects的作用域,開啟build.gradle繼續寫入:
allprojects {
tasks.create('hello') {
doLast {
task ->
print "project name is $task.project.name \n"
}
}
}
subprojects {
hello << {
print "here is subprojects \n"
}
}
可以看到我們在下面新加了subprojects,並通過之前建的task任務hello輸出了一段字串,繼續執行命令gradle -q hello
bogon:test_gradle mq$ gradle -q hello
project name is test_gradle
project name is app
here is subprojects
project name is lib
here is subprojects
可以看到只有只有根目錄下面沒有subprojects中task的輸出,這也印證了我們上面的結論:allprojects是對所有project的配置,包括Root Project。而subprojects是對所有Child Project的配置。
進入Child Project目錄下,新建一個build.gradle檔案,寫入:
hello.doLast {
print " —— I'm the app project \n"
}
繼續執行命令gradle -q hello
,執行結果:
bogon:test_gradle mq$ gradle -q hello
project name is test_gradle
project name is app
here is subprojects
—— I'm the app project
project name is lib
here is subprojects
可以看到遍歷順序是:allprojects > subprojects > Child Project