前言
关于Gradle的文章很多,但是大多是以一些技巧为主,东敲西打看了之后可能解决了一些问题,但对于新的需求,gradle如何运用到项目中还是一知半解。我准备了系列教程。
Groovy基础
项目中build.gradle都是用groovy写的,不了解一下groovy怎么能看得懂呢?这里只需要知道groovy的一些基础知识,比如怎么定义变量,定义方法,方法怎么使用,闭包的使用,这些就差不多了。 首先要知道groovy是一种脚本语言,有下面三个特点:
- 是一种动态语言,不需要编译直接生效
- 是一种DSL,即Domain Specific Language(专门领域的编程语言,所以比较难阅读)
- Groovy基于Java同时也像是一种脚本语言(基于java,这个看下面基本语法就明白了)
基本语法
- 定义基本变量:
def variable1 = 1 //可以不使用分号结尾
def varable2 = "I am a person"
def int x = 1 //变量定义时,也可以直接指定类型
- 字符串:
1 单引号''中的内容严格对应Java中的String,不对$符号进行转义
def singleQuote='I am $ dolloar' //输出就是I am $ dolloar
2 双引号""的内容则和脚本语言的处理有点像,如果字符中有$号的话,则它会$表达式先求值。
def doubleQuoteWithoutDollar = "I am one dollar" //输出 I am one dollar
def x = 1
def doubleQuoteWithDollar = "I am $x dolloar" //输出I am 1 dolloar
3 三个引号'''xxx'''中的字符串支持随意换行 比如
def multieLines = ''' begin
line 1
line 2
end '''
- 定义函数:
String testFunction(arg1,arg2){//无需指定参数类型
...
}
def nonReturnTypeFunc(){
last_line //最后一行代码的执行结果就是本函数的返回值
}
//如果指定了函数返回类型,则可不必加def关键字来定义函数
String getString(){
return "I am a string"
}
- 函数调用:
println("test") ---> println "test"
// 可以不加括号,但是建议:自定义的方法调用加上括号! API提供的方法调用可以不用括号
- 数据类型:
- java中的基础数据类型
在Groovy中所有事物都是对象,int count = 12; //这里的count其实是Integer类型,其他的使用和Java一样
- 容器类
1.List
变量定义:List变量由[]定义,也可以赋予一些初始值,比如
def aList = [5,'string',true] //List由[]定义,其元素可以是任何对象
变量存取:可以直接通过索引存取,而且不用担心索引越界。如果索引超过当前链表长度,List会自动
往该索引添加元素
assert aList[1] == 'string'
assert aList[5] == null //第6个元素为空
aList[100] = 100 //设置第101个元素的值为10
assert aList[100] == 100
那么,aList到现在为止有多少个元素呢?
println aList.size ===>结果是101
2.Map
Map由[:]定义,注意其中的冒号。冒号左边是key,右边是Value。key必须是字符串,value可以是任何对象。另外,key可以用''或""包起来,也可以不用引号包起来。比如
def mapData = [:]
mapData.put("name","test name")
println(mapData.get("name"))//输出“test name”
3.闭包(Closure)
- 定义:闭包,是一种数据类型,它代表了一段可执行的代码。他可以作为方法的参数,或者返回值,也可以独立运行
**
//自定义一个闭包
def aClosure = { //闭包是一段代码,所以需要用花括号括起来..
String param -> println("test closure,para = $param") //这个箭头很关键。箭头前面是参数定义,箭头后面是代码
return 200 //返回值
}
//调用这个闭包:(用call方法或者直接蚕食写在括号里面)
def count = aClosure.call("dml")
// def count2 = aClosure("dml")
println("$count")
在Gradle控制台看一下输出: