Setting文件
Setting.gradle,用於初始化和工程樹的配置.
//定義了兩個子項目,併爲他們指定了目錄的位置,如果不配置則默認目錄爲其同級的目錄
rootProject.name=''
include':example02'
project(':example02').projectDir=new File(rootDir,'chapter01/example2')
include':example03'
project(':example03').projectDir=new File(rootDir,'chapter01/example3')
每個Project都會有一個Build文件,RootProject也不例外.
RootProject可以獲取到所有的子項目,所以我們可以在RootProject的build中爲所有子項目統一配置,比如應用的插件,依賴的maven中心等等
subproject{ // 子項目
apply plugin:'java'
repositories{
jcenter()
}
}
allprojects{
}
Task
創建一個Task
//其實是project.task(String taskName,Closure<> closure)
task cc {
println "in create task"
doFirst{
println "doFirst"
}
doLast{
println "doLast"
}
}
任務的依賴
task cc {
//println "cc mid"
doFirst{
println "cc doFirst"
}
doLast{
println "cc doLast"
}
}
//單個依賴
task bb(dependsOn:cc){
doFirst{
println "bb doFirst"
}
doLast{
println "bb doLast"
}
}
//多個依賴
task ccc{
//println "ccc mid"
dependsOn cc,bb
doFirst{
println "ccc doFirst"
}
doLast{
println "ccc doLast"
}
}
腳本語言是先聲明後使用
通過任務名操縱任務的原理是: Project 在創建任務的時候,同時把該任務對應的任務名註冊爲 Project 的屬性
自定義屬性
Project和Task都允許用戶添加額外的自定義屬性;
要添加多個自定義屬性可以通過代碼塊實現;
即是通過應用所屬的對應的 ext 屬性即可實現,添加之後可以通過對 ext 對自定義屬性讀取設置。
//project的屬性
ext.name="xiaohuang"
//閉包實現多個屬性的添加
ext{
age=18
num=18
}
task printExt {
//task也有個name屬性,就是TaskName,所以需要
println "age=$age,name=$project.name,num=$num"
}
相比局部變量,自定義屬性有更廣大的作用範圍,你可以通過跨 Project 和跨 Task 來訪問這些屬性;
自定義還可以應用在 SourceSet 中,使用 productFlavors 來定義多個渠道的時候,除了main SourceSet還會新增很多SourceSet
apply plugin:"java"
sourceSets.all{
//爲sourceSets.中的每一個sourceSet初始化一個sourceDir屬性
ext.sourceDir=null;
}
sourceSets{
//創建多個sourceSet,並賦予屬性
main{
sourceDir="mianDir"
}
test{
sourceDir="testDir"
}
}
task pp {
sourceSets.each{
println it.sourceDir
}
}
一般可用於自定義版本號和版本名稱,我們會把它放在一個獨立的gradle文件中,便於管理
腳本即代碼,代碼即腳本
雖然Gradle是腳本,但我們需要時刻記得我們的寫的都是代碼,
所以我們可以使用Groovy、Java Gradle的任何語法和api實現我們想做的事
定義Class、內部類、導入包、定義方法、常量、接口、枚舉
def String getTime(){
def date=new Date();
def dateString =date.format("yyyy-MM-dd")
return dateString
}
task pp {
sourceSets.each{
println it.sourceDir +getTime()
}
}