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()
}
}