为了更好地使用gradle,我觉得有必要先来入门一下groovy。
什么是groovy
groovy是一门面向对象敏捷开发语言,和java一样也是运行在jvm上的。所以groovy支持所有java语法,在此基础上也有一些自己的特性。他可以单独作为脚本语言来使用也可以像java一样使用。
我理解,他作为gradle的脚本语言也就是因为他可以作为脚本语言来构建项目。这点很灵活。
新建groovy项目
我们这里使用idea新建一个groovy项目。
next,填写项目名。新建完成。
打开一个groovy console。
我们再这里开始编写我们的测试代码。
groovy特性
兼容java语法
public class Test{
private int num1;
private int num2;
Test(int num1, int num2) {
this.num1 = num1
this.num2 = num2
}
int getNum1() {
return num1
}
void setNum1(int num1) {
this.num1 = num1
}
int getNum2() {
return num2
}
void setNum2(int num2) {
this.num2 = num2
}
}
Test t = new Test(1, 1);
System.out.println(t.getNum1());
这是一个典型的javaBean,两个属性以及getter/setter方法,还有他的构造器。
下面声明了一个变量,并且打印了一下这个变量的值。结果为1.
所以groovy是支持java语法的。
方法可以省略括号
def version = 1.0
println(version)
println version
这两种方法是一样的,都是打印这个字符串。
三种字符串写法
在groovy中有3中引号,单引号,双引号,三引号。
单引号,和在java中定义string是一样的。
双引号,可以动态的拼接字符串。
三引号,定义的字符串可以实现换行。
举栗
def version = 1.0
def s1 = 'my name is wm'
def s2 = "my project version is ${version}"
def s3 = '''my
name
is
wm
'''
println s1
println s2
println s3
省略末尾分号
属性自动添加getter、setter方法
类,方法,属性默认都是public
可以省略return,默认方法最后一个表达式的值作为返回值
这几个可以放在一起说,我们将上面的代码改造一下
class Test{
int num1
int num2
Test(int num1, int num2) {
this.num1 = num1
this.num2 = num2
}
int query(){
num2
}
}
Test t = new Test(1, 2)
println '调用get方法:'+t.getNum1()
println '直接打印属性:'+t.num1
println '调用query方法:' + t.query()
运行成功,所以在groovy里,末尾的分号有没有都没有影响,但是如果多个参数在同一行。那么就要用分号隔开了。
并且即使我们没有getter setter方法,我们也可以调用。
而且我们属性的访问权限也是public,可以直接调用。
在我们写的query方法中,直接返回num2,并且省略了return语句。
==和equal作用一致
在java中,如果为引用类型,那么==对比的是他们变量的堆内存地址,equal对比的是他们引用是否一致。
在groovy中,统一了这两个方法。
弱类型def
和javascript中的var一样,在groovy中使用def可以定义变量,他会在运行时动态的去推导变量类型。
def version = 1.0
def version2 = '现在版本1.0'
println version
println version.getClass()
println version2
println version2.getClass()
assert断言
def version = 1.0
assert version == 1.0
assert version == 2
当为false时会报错。
集合API
list
在java中定义一个集合,是使用{},但在groovy中把这个符号给了闭包。后面会说。
所以定义集合和定义数组是一样的,使用[]。
List list = ['aa','bb','cc']
list << 'def'
println list
map
Map map = ['java':1.8,'py':3]
map.maven = 3.5
println map
闭包
我理解,groovy中把java的lambda变了一下,起了一个新的名字叫闭包。
首先闭包通过{}来定义的。下面举个例子
def b1 = {
println 'hello'
}
def b2 = {
a -> println a
}
def method1(Closure c){
c()
}
def method2(Closure c){
c('world')
}
method1(b1)
method2(b2)
b1 b2 就是我们定义的闭包。
我们又定义了2个方法,method1和method2.他们分别传入一个闭包(Colsure)。
在方法内调用闭包。
最后我们执行以下method1和method2.
结果
大概内容就这些吧。知道这些应该可以基本看懂build.gradle的构建脚本了。