前面我们已经了解和安装gradle,但是为了学好gradle,那就先了解一下groovy吧!
groovy语法
提示:测试方法(Idea)
1)new Project – gradle
2)Tools – groovy console
3)在groovy console里面编写groovy代码
groovy介绍
Groovy是java虚拟机的一种敏捷的动态语言,既可以使用动态语言的特性,又可以写脚本,gradle的构建脚本就是用groovy写的。
基本语法
1)可以省略行尾分号
2)可以省略方法的参数类型
3)类有默认的getter/setter方法,可以省略不写
4)方法默认最后一行为返回值,可以不写return
5)可以直接通过.xx访问属性
6)==其实调用了equals方法
groovy的代码示例:
public class ProjectVersion{
private int major;
// 1)可以省略分号
private int minor
// 2) 可以省略参数类型
ProjectVersion(major, int minor) {
this.major = major
this.minor = minor
}
int getMajor() {
// 4) 默认最后一行返回值
// return major 等于
major
}
void setMajor(int major) {
this.major = major
}
// 3) 默认有getter/setter方法
}
ProjectVersion v1 = new ProjectVersion(1,1);
// 4)默认最后一行返回值,可以省略return
println v1.getMajor()
// 5)可以直接访问属性
println(v1.minor)
// 6) == 其实是equals()方法
ProjectVersion v2 = null;
println v2==v1
groovy的高级特性
1)def定义变量不用写类型
2)assert使用
3)调用方法的括号是可选的
4)字符串3种写法
5)集合api
6)closure 闭包
// 1 可选的类型定义
// 这里的version是int
def version = 1
// 2 assert
// assert version == 2
// 3 括号是可选的
println(version)
println version
// 4 字符串的定义
// 4.1普通的字符串
def s1 = 'immoc'
// 4.2 可以传递变量
def s2 = "gradle version is ${version}"
// 4.3 可以换行显示
def s3 = '''my name
is
jack
'''
println s1
println s2
println s3
// 5 集合api
// 5.1 list
def buildTools = ['ant', 'maven'];
// 添加元素
buildTools << 'gradle'
assert buildTools.getClass() == ArrayList
assert buildTools.size() == 3
// 5.2 map
def buildYears = ['ant' : 2000, 'maven' : 2004]
buildYears.gradle = 2009
println buildYears.ant
println buildYears['gradle']
println buildYears.getClass() // java.util.LinkedHashMap
// 6 闭包
// 6.1) 带参数的闭包
def c1 = {
v ->
print v
}
// 6.2) 不带参数的闭包
def c2 = {
print 'hello'
}
def method1(Closure clourse){
clourse('param')
}
def method2(Closure clourse){
clourse()
}
method1(c1)
method2(c2)
重点
gradle最简单的构建脚本分析
// 构建脚本默认都是有一个Project实例,这里是调用apply方法
// apply(plugin:'java')
apply plugin:'java'
// Project上有一个属性是vesion
version = '0.1'
// Repository是一个方法 ,这里使用闭包作为参数
repository {
mavenCentral()
}
// dependencies是一个方法 ,这里使用闭包作为参数
dependencies {
compile 'commons-codec:commons-codec:1.6'
}