对于Gradle的一点认识(一)

一、项目自动化介绍

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的动作

八、依赖管理

8.2 版本冲突

非常感谢慕课网提供的学习视频

猜你喜欢

转载自blog.csdn.net/Duckdan/article/details/80707691
今日推荐