我正在参加「掘金·启航计划」
这篇文章不在于将gradle 讲的多么透彻,而是要给想学习gradle 的人做一个简单的入门介绍。
文章行文不像其他文章那样长篇累牍,而是将重点取出,以一系列标号来表示各个重点内容。希望读者可以抓住重点。
简介
- 是一个灵活且高效自动化的构建工具。
- 构建脚本一般采用Groovy 编写(也有用Kotlin 的)。
- 两种语言都基于JVM。
特点
- Java 后端常用Groovy 语言,是一种面向对象的语言。
- 所以在Gradle 中处处皆对象。
- Gradle 的.gradle 脚本实质上是一个Project 对象。
- 脚本中一些带名字的配置项,如:buildscript / allprojects 这些本质上就是对象中的方法。
- 这些配置项后面的闭包{} 就是参数。
- 使用这些配置项的时候,本质就是在调用对象中的一个方法。
- 在Gradle 中,主要有
Project和Task对象。 - Project 是Gradle 中的构建脚本的表示,一个构建脚本对应一个Project 对象。
- Task 是Gradle 中最小的执行单元,它表示一个独立的任务,Project 为Task 提供了执行的上下文。
Groovy 的闭包语法
- Groovy 中的闭包是使用{参数列表 -> 代码体} 来表示的代码块。
- 当参数小于等于1 个的时候,箭头
->可以忽略。 - 在只有1 个参数的时候,如果不指定参数名,那么默认以
it为参数名。 - 在Groovy 中,闭包的类型是Closure,所以说闭包也可以当做参数进行传递。
- 闭包有一个delegate 字段,通过这个字段可以把闭包中的执行代码,委托给任意对象来执行。
- 示例代码如下:
class Student{
def name
def grade
}
// 声明一个Student 对象
def student = new Student()
// 定义一个闭包
def closure = {
name = 'xiaohong'
grade = 2
}
// 然后将闭包委托给student 对象来执行
closure.delegate = person
// 执行闭包(也可以调用closure.call() 来执行闭包)
closure()
// 上面那些代码就是将闭包委托给student 对象去执行
// 然后这个闭包在执行时就处于student 对象的上下文
// 所以这个闭包就可以访问到student 对象中的name 和grade 字段,完成赋值工作
println person.name
// 输出内容:xiaohong
println person.age
// 输出内容:2
- 在Gradle 中,很多地方都使用了闭包的委托机制。
- 我们可以通过委托机制,来完成一些特定对象的配置工作。
- 在Gradle 中,如果没有为某个闭包指定delegate,那么delegate 就默认为当前的Project 对象。
总结
这篇文章主要是对gradle 做一个简单的入门介绍,包括其简介及特点,以及闭包的概念。