一、项目自动化介绍

1.1主流的构建工具

Ant: 编译、测试、打包


Maven: 依赖管理、发布


Gradle: 一个开源的项目自动化构建工具,建立在Apache Ant和Apache Maven概念的基础上,并引入了基于Groovy的特定领域语言(DSL),而不再使用XML形式管理构建脚本。其实质就是一个用Groovy语言编写的程序框架

1.2 Gradle做什么?

作为一个构建工具,它必定具有构建工具的功能,比如:依赖管理、自动化运行测试、打包、发布到指定的地方去。因为其具有很好的灵活性和扩展性,给程序提供更广阔的空间。

二、Gradle的安装

因为Gradle是基于JVM的,所以一定要确定本机已经安装了JDK。


步骤一:



android gradle 命令行编译 gradle编译流程_构建工具

下载完成,可以随意找个文件位置进行解压。 步骤二:


android gradle 命令行编译 gradle编译流程_构建工具_02


三、Gradle的压缩文件下的目录

bin: bin目录下有两个可执行文件,一个是gradle(类unix系统下的可执行文件),一个是gradle.bat(windows系统下的可执行文件)


init.d: 所有的初始化脚本都在这个目录下面,每次执行构建之前都会将这个目录下面的脚本都执行一遍。如果有这方面的需求,可以将脚本拷贝至该目录


lib: gradle本身所依赖的jar包


media: 图标文件

针对项目的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)
    }
}

四、构建脚本概要

4.1 构建块:



android gradle 命令行编译 gradle编译流程_Gradle_03



android gradle 命令行编译 gradle编译流程_Gradle_04


4.2 项目



android gradle 命令行编译 gradle编译流程_初始化_05

group、name、version三者就是一个依赖的坐标,又它们三者来确定唯一依赖的库


apply: apply是Project上面的一个方法,它用来引入当前项目需要哪些插件


dependencies: 用来申明当前项目依赖于哪些jar包或者其它项目


repositories: 用来指定当前项目依赖哪些库工程


task: 申明当前项目中的任务


属性的其他配置方式: ext、gradle.properties

4.3 任务



android gradle 命令行编译 gradle编译流程_构建工具_06

depdendsOn: 用于申明任务依赖的


doFirst: task就是一个任务列表,doFirst就是在一个任务列表的最前端添加一个动作


doLast(可以用"<<"代替): doLast就是在一个任务列表的最后端添加一个动作


注意:一个任务里面可以执行多次doFirst、doLast

五、构建的生命周期



android gradle 命令行编译 gradle编译流程_构建工具_07



android gradle 命令行编译 gradle编译流程_Gradle_08

初始化阶段:主要初始化项目,确定有哪些项目要参与到构建当中


配置阶段: 主要生成task的依赖关系和执行图


执行阶段:执行task的动作

六、依赖管理



android gradle 命令行编译 gradle编译流程_初始化_09



android gradle 命令行编译 gradle编译流程_Gradle_10



android gradle 命令行编译 gradle编译流程_构建工具_11



android gradle 命令行编译 gradle编译流程_构建工具_11



android gradle 命令行编译 gradle编译流程_Gradle_13



android gradle 命令行编译 gradle编译流程_构建工具_14



android gradle 命令行编译 gradle编译流程_Gradle_15


七、版本冲突



android gradle 命令行编译 gradle编译流程_构建工具_16



android gradle 命令行编译 gradle编译流程_构建工具_17



android gradle 命令行编译 gradle编译流程_构建工具_18



android gradle 命令行编译 gradle编译流程_构建工具_19



android gradle 命令行编译 gradle编译流程_初始化_20



android gradle 命令行编译 gradle编译流程_初始化_21



android gradle 命令行编译 gradle编译流程_构建工具_22