备注:本文修订于2020年11月18日

1、Gradle简介

Gradle是一种构建工具,它可以帮你管理项目中的依赖、编译、打包、部署等。纵观历史,总共出现了三种构建工具,分别是:Ant,Maven,Gradle。Ant属于上古时期,它可以自动化打包,从而解放了人力。Maven属于现代社会,不仅可以自动化打包,相比于Ant,它还能帮你下载Jar包和管理Jar包。但是,Maven的打包逻辑太死板,定制起来太麻烦,不如Ant灵活。这个时候Gradle登场了,它属于后现代社会,既能自动下载和管理Jar包,又能自己写脚本,并且脚本写起来还比Ant还好用。

Ant和Maven都是基于XML的构建工具,而Gradle是用Groovy编写的构建工具,Gradle通过编写一个名为build.gradle的脚本文件对项目进行设置,再根据这个脚本对项目进行构建。Gradle脚本本质上就是Groovy脚本,它充分利用了Groovy的语法糖,例如省略方法参数括号和省略句尾分号等,让代码看起来十分清爽。相对Groovy脚本的灵活强大,Ant和Maven使用XML来做配置,则显得呆板很多。

2、Gradle基本概念

Gradle里有两个基本概念:项目(Project)和任务(Task)。Gradle是根据目录中有没有build.gradle文件来判断这个目录是不是一个Project,任何包含build.gradle文件的文件夹都可以称之为Project。任务可以理解成一个构建过程中原子性的工作,例如编译、打包、执行等。

一个 build.gradle 对应一个 Project 对象,在 gradle 文件中可通过 project 属性访问该对象。而 rootProject 属性代表的是根 Project 对象,即项目根目录下的 build.gradle 文件。Project 由一系列的 task 组成,用户可以自定义 task,也可以继承已有的 task。在 gradle 文件中,我们一般使用 task 关键字来定义一个 task,通过 task 的名字就可以直接访问该 task 对象。

3、Gradle的构建过程

Gradle的构建分三个阶段:

Initialization:配置构建环境以及有哪些 Project 会参与构建(解析 settings.build)

Configuration:生成参与构建的 Task 的有向无环图以及执行属于配置阶段的代码(解析 build.gradle)

Execution:按序执行所有 Task

4、Task入门练习

一个Task表示一个逻辑上较为独立的执行过程,比如编译Java源代码,拷贝文件,打包Jar文件,甚至可以是执行一个系统命令或者调用Ant。另外,一个Task可以读取和设置Project的Property以完成特定的操作,因为Project为Task提供了执行上下文。让我们来看一个最简单的Task,创建一个build.gradle文件,内容如下:

task sayHello {
   println "Hello World!"
}

在与build.gradle相同的目录下执行:gradle sayHello

E:\mybatis>gradle sayHello

> Configure project :
Hello World!

BUILD SUCCESSFUL in 1s

在默认情况下,Gradle将当前目录下的build.gradle文件作为项目的构建文件。在上面的例子中,我们创建了一个名为sayHello的Task,在执行gradle命令时,我们指定执行这个sayHello Task。这里的sayHello是一个DefaultTask类型的对象,这也是定义一个Task时的默认类型,当然我们也可以显式地声明Task的类型,甚至可以自定义一个Task类型。比如,我们可以定义一个用于文件拷贝的Task:

task copyFile(type: Copy) {
   from 'src'
   into 'dest'
}

以上copyFile将src文件夹中的所有内容拷贝到dest文件夹中。这里的两个文件夹都是相对于当前Project而言的,即build.gradle文件所在的目录。

5、Gradle的入门建议

Gradle的入门其实很简单,不需要深入学习 Groovy(随用随查),也不用记 Gradle 的 API(随用随查)。只需要了解几个核心概念(构建模型、构建的生命周期、Project、Task、TaskContainer),就能做到一通百通了。

6、参考

Gradle中的Project介绍

Gradle的Task介绍

标签: none

添加新评论