gradle学习之旅(二) gradle安装、构建脚本初识
一、安装
二、构建脚本
构建脚本名字默认为build.gradle,可以以指定脚本来完成构建。
gradle的构建脚本使用Groovy脚本语言的DSL,其中使用了大量的语言特性来使得脚本的编写“看起来”像是在描述构建,实际上构建脚本的语言仍然是最基本的面向对象的Groovy或java代码,下面将详细说明Gradle构建脚本中使用到的Groovy与语言特性。
Groovy语法之java不同点
1.表达式后面的分号是可选的;
2.类和构造器的方法默认为public;
3.方法体中最后一个表达式的值,意味着return语句是可选的;
4.Groovy会默认为类的filed写好setter和getter方法,并且可以通过点号来获取,实际上底层调用的是getter和setter方法,点号只是一种简写;
5.使用“==”来比较两个对象时,实际上是调用了equals()方法。
assert语句
在java种也有assert关键字,只不过基本不用而且不推荐使用,Groovy种可以使用assert语句提供有用输出和查找问题根源,使用方法为assert [返回值为布尔值的表达式]
可选类型定义
Groovy中可以用def关键字对声明类型进行简单标示,它作为java.lang.Object的一个占位符,在运行时Groovy通过所赋的值分析出其类型。
可选的括号
在Groovy种如果方法签名至少需要一个参数,则方法可以省略括号,比如
apply plugin:'java'
//apply是project的方法,调用该方法并传入一个Size为1的Map作为参数,key为‘plugin’,value为‘java’
println('hello world')
println 'hello world'
字符串
‘’号字符串相当于java的String类型
“”号字符串是GString类型,支持插值变量到字符串中,使用方法为“这是一个字符串${变量名}”
“”“
。。。
。。。
“”“ 三引号用于多行的字符串
集合API
List
底层是java.util.ArrayList,创建方式可以为:
def buildtools = ['ant','maven']
可以用左移操作符(<<)向List中加入一个元素,实际上调用的是add方法
buildtools << 'gradle'
遍历:
buildtools.each{ buildtool ->
println buildtool
}
上面的方法调用传入了一个闭包实例作为参数,在后面会提及。
Map
底层是java.lang.LinkedHashMap,创建:
def buildtools = ['ant':200,'maven':300]
添加
buildtools['Gradle'] = 400
遍历
buildtools.each{ buildtool , number ->
println "${buildtool}的数字为$number"
}
命名参数
就是在调用构造器的时候传入 参数名:值 这样的参数,在构造完成后会自动执行setter为实例的field赋值。
闭包
闭包是一种类,其类型为groovy.lang.Closure,与java8的lambda特性相似,闭包可以被赋值给变量,作为参数传递给方法,并且向普通方法一样来调用(方法指针)。
在Groovy中向方法传入一个闭包必须使用{},闭包总会返回一个值,返回的是最后一条语句的值,若最后一条语句没有值则返回null。
闭包对象的调用为 对象名.call(),简写为 对象名(),在Groovy闭包对象代表一个方法,所以可以理解为方法引用。
没有显示定义任何参数的闭包都可以访问一个隐式的参数it,代表调用这个闭包的时候第一个传进来的参数。
闭包委托
闭包的委托策略 这边文章里面讲述了闭包的委托策略,利用闭包委托可以实现如下代码
class ProjectVersion{
Integer major
Integer minor
void increment(Closure closure){
closure.resolvesStrategy = Closure.DELEGATE_ONLY
closure.delegate = this
closure()
}
ProjectVersion projectVersion = new ProjectVersion(major: 1, minor: 10)
projectVersion.increment{ major += 1 }
projectVersion.increment{ minor += 5 }
}
帮助文档
GDK在线文档 这里面可以找到String、Collection、File、Stream的很多好用的方法。
官方文档
在了解了上述内容之后,就可以看懂大部分的构建脚本代码在做什么了,一个构建脚本对应一个Project实例,可以被gradle命令执行的为Task接口的实例,gradle脚本是一种贯彻领域设计的语言,所以对于自动化项目的各个方面都有对应的设计,比如还有DependencyHandler代表依赖管理,这些在之后的学习中都会了解到。
下面是一个java项目的构建脚本,以此来说明脚本中用到的Groovy语言特性:
apply plugin:'java' //调用Project的apply方法,传入一个size为1的Map作为参数,方法调用省略括号
version = '1.0' //调用Project的setter方法来为项目设置版本属性
repositories{
mavenCentral() //调用Project的repositories方法,并传递一个闭包参数,该方法会调用闭包委托的mavenCentral()方法。
}
dependencies{
compile 'commons-codec:commons-codec:1.6' //调用Project的dependencies方法,并传递一个闭包参数,调用闭包委托的compile方法,用一个String作为参数,省略括号
}