原文日期:2017-05-23
Gradle使用已经有一段时间了,闲来无事,稍微总结下Gradle,特别是Gradle脚本的实现本质。Gradle是一个项目构建工具,基于Groovy语言开发,抛弃了基于XML的繁琐配置,是Ant和Maven的升级版(本人没有怎么使用Ant,所以不太了解,只看过它复杂的XML配置。Maven是有使用过,挺简单的,但相对Gradle的配置而言,XML配置依然太过冗余、繁琐)。
因为是基于Groovy语言开发,所以Gradle脚本语言是符合Groovy语法规范,并且Gradle中大量的使用了Groovy的闭包结构。
Groovy语言下的闭包概念
Groovy的闭包即一段代码块,它能被赋值给变量,也能作为函数参数和返回值。如下定义一个闭包变量test
def test={
println("the first print")
println("the second print")
}
闭包作为参数传入方法,调用Groovy函数时可以不需要括号。
def test(String t,Closure c){
println("---$t---")
c()
}
调用test('tt',{ println("the test print")})
<==>test 'tt',{ println("the test print")}
当闭包为最后一个参数是,可以省略在括号,并将闭包移除来,如上还可这样调用(Gradle脚本中有大量使用这种的写法)
调用test('tt'){ println("the test print")}
<==>test('tt',{ println("the test print")})
如果只有一个参数,并且该参数是闭包Closure,则调用时括号也可以去掉(Gradle脚本中有大量使用这种的写法)
def test(Closure c){
c()
}
调用test{ println("the test print")}
<==> test({ println("the test print")})
Gradle脚本
apply plugin: 'java'
等价于<==>apply (plugin: 'java')
//编译文件
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
等价于<==>tasks.withType(JavaCompile, {
options.encoding = "UTF-8"
})
//打war包阶段
war{
baseName = "test"
}
等价于<==>war({
baseName = "test"
})
注:因为安装Gradle时,Gradle自带Groovy引擎,所以测试Groovy代码,可以直接通过Gradle脚本来测试实现。