一、项目自动化介绍
1.1主流的构建工具
Ant: 编译、测试、打包 Maven: 依赖管理、发布 Gradle: 一个开源的项目自动化构建工具,建立在Apache Ant和Apache Maven概念的基础上,并引入了基于Groovy的特定领域语言(DSL),而不再使用XML形式管理构建脚本1.2 Gradle做什么?
作为一个构建工具,它必定具有构建工具的功能,比如:依赖管理、自动化运行测试、打包、发布到指定的地方去。因为其具有很好的灵活性和扩展性,给程序提供更广阔的空间。二、Gradle的安装
因为Gradle是基于JVM的,所以一定要确定本机已经安装了JDK。步骤一:
下载完成,可以随意找个文件位置进行解压。
步骤二:
三、Gradle的压缩文件下的目录
bin: bin目录下有两个可执行文件,一个是gradle(类unix系统下的可执行文件),一个是gradle.bat(windows系统下的可执行文件)
init.d: 所有的初始化脚本都在这个目录下面,每次执行构建之前都会将这个目录下面的脚本都执行一遍。如果有这方面的需求,可以将脚本拷贝至该目录
lib: gradle本身所依赖的jar包
media: 图标文件
四、Groovy介绍
4.1 Groovy是什么?
4.2 Groovy与Java比较
(1) Groovy完全兼容Java语法,即在Groovy中编写java代码是可以执行的。因为二者都是基于JVM的,Groovy最后也是编译成java字节码的
(2) 代码行尾的分号是可选的
(3) 类、方法默认都是public的
(4) 编译器给属性自动添加getter/setter方法
(5) 属性可以用点号获取
(6) 在方法里面最后一个表达式的值会被作为返回值,即如果一个方法有返回值,那么return这个关键字可以不写
(7) ==等同于equals(),不会有NullPointerExceptions,但是直接用空对象去调用属性或方法的时候仍会报空指针异常
4.3高效特性
(1) 自带断言语句,即assert语句
(2) 可选类型定义,申明变量可以使用”def 变量名”,变量的具体类型是根据后面的操作推导出来的
(3) 可选括号,调用方法的时候如果有参数,括号可以不写
(4) 字符串,Groovy的字符串有三种表达形式:单引号、双引号、三个单引号
(5) 集合API,Groovy中的List和Map有更高效的写法
(6) 支持闭包
五、利用IDEA搭建Gradle项目
打开Groovy Console控制器
对于Groovy语言的特性测试一
public class ProjectVersion {
private int major;
private int minor; //没有给minor添加set/get方法
ProjectVersion(int major, int minor) {
this.major = major //语句末尾没有分号,成功编译执行
this.minor = minor
}
int getMajor() {
major //最后一个表达式作为返回值
}
void setMajor(int major) {
this.major = major
}
}
ProjectVersion v1 = new ProjectVersion(2, 1);
println v1.major; //打印成功
println v1.minor; //打印成功
ProjectVersion v2 = null;
println v2==v1 //false,未报空指针异常
println v2.minor //报空指针异常
对于Groovy语言的特性测试二
//Groovy的高效特性
//1 可选的类型定义
def version = 1;
//2 assert断言
//assert version == 2;
//3 括号是可选的
println version
//4 字符串
def s1 = 'groovy';
def s2 = "gradle version is ${version}"
def s3 = '''gradle
is
good tools'''
println s1
println s2
println s3
//5 集合
//list
def buildTools = ['ant', 'maven'];
buildTools << 'gradle'
assert buildTools.getClass() == ArrayList
assert buildTools.size() == 3
//map
def buildMap = ["ant": "第一代工具", "maven": '第二代工具'];
buildMap.gradle="第三代工具";
println buildMap.size();
println buildMap
println buildMap.ant
println buildMap.getClass() //LinkedHashMap
//6 闭包
def c1={
v->println v
}
def c2={
println 'hello'
}
//这里的Closure不能导包,它是Groovy自带的
def method1(Closure closure){
closure('有参数')
}
def method2(Closure closure){
closure()
}
method1(c1)
method2(c2)
针对项目的build.gradle的解释
//构建脚本默认都有一个Project实例,构建脚本的所有代码
//作用域都是Project
apply plugin: 'java' //apply是一个方法,括号省略了。其参数类型为Map集合
version='0.1' //Project实例上面有一个属性叫version,其值为0.1
//repositories是一个方法,括号省略了。{}及其里面的内容作为一个闭包传递给该方法
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
//创建一个闭包
def createDir = {
path ->
File dir = new File(path);
if (!dir.exists()) {
dir.mkdirs();
}
}
//自定义任务
task makeJavaDir() {
def paths = ['src/define/file1', 'src/define/file2'];
//执行阶段执行的代码
doFirst {
paths.forEach(createDir)
}
}
task makeWebDir(){
//配置阶段就要确定好,任务的依赖,执行阶段修改依赖是错误的做法
dependsOn 'makeJavaDir'
def paths=['src/main/webapp','src/test/webapp']
//执行阶段执行的代码
doLast{
paths.forEach(createDir)
}
}
六、构建脚本概要
6.1 构建块:
6.2 项目
group、name、version三者就是一个依赖的坐标,又它们三者来确定唯一依赖的库
apply: apply是Project上面的一个方法,它用来引入当前项目需要哪些插件
dependencies: 用来申明当前项目依赖于哪些jar包或者其它项目
repositories: 用来指定当前项目依赖哪些库工程
task: 申明当前项目中的任务
属性的其他配置方式: ext、gradle.properties
6.3 任务
depdendsOn: 用于申明任务依赖的
doFirst: task就是一个任务列表,doFirst就是在一个任务列表的最前端添加一个动作
doLast(可以用”<<”代替): doLast就是在一个任务列表的最后端添加一个动作
注意:一个任务里面可以执行多次doFirst、doLast
七、构建的生命周期
初始化阶段:主要初始化项目,确定有哪些项目要参与到构建当中
配置阶段: 主要生成task的依赖关系和执行图
执行阶段:执行task的动作