gradle基础语法
java/groovy
gradle脚本是通过groovy语法编写的,而groovy又是无缝兼容java的,所以gradle脚本中可以直接写java代码或groovy代码,例如:
{
//java代码
Map<String,String> map = new HashMap<>();
map.put("name","vvv")
map.put("age","123")
println(map.get("name")+" : "+map.get("age"))
//groovy代码
File f = file(project.projectDir)
f.list().each {
item ->
println(item)
}
}
定义变量
局部变量
局部变量通过def关键字定义,属于groovy基础语法
额外属性
额外属性通过gradle对象的ext属性定义,类似于javascript的prototype属性,动态的给对象添加属性。
def name = "dengyun.zhou"
project.ext{
springVersion = "3.4.0"
dianpingGroup = "com.dianping.com"
}
println(name)
println(project.ext.springVersion + " : "+ project.ext.dianpingGroup)
}
gradle.properties
gradle命令运行时会默认读取$GRADLE_HOME和当前项目根目录下的gradle.properties文件,因此在gradle脚本中可以直接使用其中的内容,例如:
//读取gradle.properties文件中存在osName属性,则直接使用
if(hasProperty("osName")){
println(osName)
}
//hasProperty方法为Project对象的成员,用于判断当前属性是否存在。
}
引用脚本文件
在一个脚本文件中引入另外一个脚本文件,例如
当前脚本build.gradle中使用如下代码引入example.gradle和taskTest.gradle两个脚本文件:
{
apply (from:'example.gradle')
apply from: 'taskTest.gradle'
}
对象增强
通过Project提供的configure方法可以动态的增强对象,例如:
{
Map test = configure(new HashMap()){
first = 1
end = 10
}
test.put("name","vv")
println(test.first+" : "+test.get("name"))
}
Project Api
一个项目对应一个Project对象的实例project,project对象是我们在gradle中访问一切内容的入口,在构建脚本中,如果我们访问未定义的方法或者属性,最终都会被委托到project对象中。
{
println(name)
println(project.name)
}
build.gradle中未定义name属性,则println(name)转化为println(project.name),所以两句效果是一致的。
project对象是gradle默认创建的Project类的实例,可以在脚本文件中直接使用。
Project对象中定义了项目相关的属性和方法,buildDir(构建目录)、projectDir(项目根路径)等,我们可以在gradle脚本文件中直接使用,例如:
println(project.description)
println(project.artifacts)
println(project.buildDir)
println(project.projectDir)
Script Api
当gradle执行脚本文件的时候,他将脚本编译为一个实现了Script接口的类,所以Script对象中定义的方法和属性在脚本文件中都可以使用。