Gradle
一款最新的、功能强大的构建工具
Groovy概述(DSL编程语言的一种)
- 基于JVM的敏捷开发语言
- 结合了Python、Ruby和Smalltalk的许多强大的特性
- groovy可以与Java完美结合,可以使用java所有的库
- 语法上支持动态类型,闭包等新一代语言特性
- 无缝集成所有已经存在的Java类库
- 支持面向对象和面向过程(写脚本用)
groovy优势:
一种更加敏捷的编程语言
入门简单,功能非常的强大
亦可以作为编程语言和脚本语言
熟练掌握Java的同学更适合学习
groovy基础语法:
groovy变量:
- 支持强类型语言和弱类型语言:
可以像Java那样声明一个变量的时候就定义其类型
int x = 10;
也可以定义其为弱类型变量(变量只在一个包内作用推荐使用,跨模板时不推荐)
def x = 10;
def x = 'nice';
上述代码先将10赋值给x,此时编译器自动将x解析为Integer类型,而后又赋值一个String变量给x(在Java中是会报错的),编译器就将其有设置为String类型
groovy字符串:
可以直接使用单引号定义一个String类型变量
def name = 'a single string' //可以不加分号
可以在输入语句中定义一个变量 ${}
def sum = "sum = 2${ + 3}" //输出: sum = 5 (只能双引号可以字符扩展)
使用双引号定义的${}是GString类型,和String类型可以相互赋值转换
使用减法直接删除减数在被减数中的值
def x = "hello nice"
def y = "nice"
println x - y //输出hello
闭包
闭包的概念也许我们稍微陌生一点,但是实际上,我们可以简单把它当做一个匿名类,只是编译器提供了更加简单的语法来实现它的功能。
闭包(Closure)是groovy中一个很重要的概念,而且在gradle中广泛使用。简而言之,闭包就是一个可执行的代码块,类似于C语言中的函数指针。在很多动态类型语言中都有广泛的使用,java8 中也有类似的概念:lambda expression,但是groovy中的闭包和java8中的lambda表达式相比又有很多的不同之处。
我们可以把闭包当做一个匿名内部类,只是编译器提供了更加简单的语法来实现它的功能。在Groovy中闭包也是对象,可以像方法一样传递参数,并且可以在需要的地方执行。
闭包有三个很重要的属性分别是:this,owner,delegate,分别代表以下概念:
- this: 对应于定义闭包时包含他的class,可以通过getThisObject或者直接this获取
- owner: 对应于定义闭包时包含他的对象,可以通过getOwner或者直接owner获取
- delegate: 闭包对象可以指定一个第三方对象作为其代理,用于函数调用或者属性的指定,可以通过getDelgate或者delegate属性获取
列表(List)
def list = [1,2,3,4,5] //定义的是一个长度为5的ArrayList
int[] array = [1,2,3,4,5] //定义的是一个长度为5的数组
int result = list.find {return it % 2 == 0} //查找第一个符合闭包条件的值
def result = list.findAll {return it % 2 == 0} //查找所有符合闭包条件的值
映射(Map)
def colors = [ red: 'ff0000',
green: '00ff00',
blue: '0000ff']
colors.red //索引方法,获取key为red的value
colors.yellow = 'ffff00' //添加元素,添加key为yellow和value为ffff00的元素
colors.complex = [a:1, b:2] //添加元素,添加key为complex和value为[a: 1.,b: 2]的map对象
=======================================================================
def students = [
1: [number: '0001', name: 'Bob', score: 55, sex: 'male'],
2: [number: '0002', name: 'Johnny', score: 62, sex: 'female'],
3: [number: '0003', name: 'Claire', score: 73, sex: 'female'],
4: [number: '0004', name: 'Amy', score: 66, sex: 'male'],
]
//遍历
students.each { def student -> println "the kry is ${student.key},"
+ "the value is ${student.value}" //获取了students里所有的key和value
面向对象
注意:
1.groovy中类和方法默认都是public
2.写脚本可在IDEA中创建一个groovy script类
3.接口中不可以写非public类型的方法
元编程
在Java中查找一个类,找不到就会报错,groovy的元编程中,找不到一个类也会继续运行下去(粗略解释)
groovy中对Json的操作
实体类转化为Json对象:
def list = [new Person(name: 'John', age: 25),
new Person(name: 'Major', age: 26)]
JsonOutput.toJson(list) // 转化为Json对象
Json对象转化为实体类:
def jsonSlpuer = new JsonSlurper()
jsonSlpuer.parse() //创建 一个JsonSluper对象,用其中的parse()方法即可
groovy对xml文件的处理
final String xml = "..."
//开始解析此xml数据
def xmlSluper = new XmlSlurper()
def response = xmlSluper.parseText(xml)
groovy对普通文件的处理
所有Java对文件的处理类,groovy都可以使用
而groovy还有其特有的处理方法
def file = new File('文件所在路径')
file.eachLine { line -> //groovy中的eachLine方法,作用是读取该文件中的每一行
println line //输出每一行
}
=========================================================================
def text = file.getText() //获取文件更简单的方法
println text
=========================================================================
def reader = file.withReader { reader ->
char[] buffer = new char[100] //获取前100个字符
reader.read(buffer)
return buffer
}