自动化发布-11.Gradle使用Groovy闭包语法总结

124 阅读2分钟

原文日期: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脚本来测试实现。