Gradle 之初相识

Posted 黑马大前端

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle 之初相识相关的知识,希望对你有一定的参考价值。

认识 Gradle

Gradle 是基于 Groovy 的一种 DSL, 又因为 Groovy 是对 Java 的扩展,所以可以理解为 Gradle 是一种基于 Java 环境的构建工具。

官方文档

安装

本文只讨论 macOS 的安装。

java 环境

因为是基于 Java 环境的,所以首先要保证已安装 JDK。

$ java -version

如果可以正确输入 java 版本号说明已安装。

安装 gradle

可以通过 Homebrew 来安装,命令如下:

$ brew install gradle

安装完成之后查看版本好来确认安装成功

$ gradle -v

Demo 示例

创建一个工程目录
$ mkdir gradle-demo && cd gradle-demo
初始化

Gradle 提供了初始化项目的命令。如下:

$ gradle init
> Starting a Gradle Daemon (subsequent builds will be faster)

> BUILD SUCCESSFUL in 5s
> 2 actionable tasks: 2 executed

初始化完成之后,会发现在项目目录中多了几个目录和文件,下面对他们进行简要的说明:

文件目录说明
    ├── build.gradle  // 项目配置脚本,用来配置当前项目的各种任务。我们大部分 Gradle 的配置都会在这里进行配置。
    ├── gradle
    │   └── wrapper
    │       ├── gradle-wrapper.jar  
    │       └── gradle-wrapper.properties  
    ├── gradlew  // Linux 和类 Unix 系统的执行文件。
    ├── gradlew.bat  // Windows 系统的执行文件
    └── settings.gradle  // 用来配置哪些项目参与工程的构建,一般多项目构建的时候会用到。

好,基本的工程文件我们已经配置好了,那么我们开始配置一个任务。

Hello World

在 build.gradle 文件中做如下配置。

task hello {
    println "Hello world"
}

然后在项目根目录下执行:

$ ./gradlew hello

可以看到输出了 hello world, 下面我们对上面的配置进行简要的说明:

大家看到这段代码的时候,可能会这样去理解:task 是一个关键字,然后后面给了一个任务的名字,最后是实现。

其实不是这样子的,因为 Gradle 的核心是基于 Groovy 的,所以这里要稍微讲一下 Groovy 的语法。 这里的 task 其实是一个函数,前面讲到 Gradle 是一种 DSL,它不是计算型的编程语言,可以理解成它是对 Groovy 脚本语言的调用,这里的 task 就是调用了一个内部函数。那么既然是调用函数,得有参数吧。是的,后面的名字和函数体都是实现。这里可能和我们通常看到的函数调用不太一样,通常我们大多数语言的函数调用,参数传递的语法都是要有括号的。但是在 Groovy 的语法里面,函数调用的参数传递是可以省略括号的。所以上面的代码和下面的是一致的:

task(hello, {
    println("Hello world");
})

同时,Groovy 还有一个语法是:如果函数的最后一个参数是一个闭包,那么这个闭包可以写在括号的外面。所以上面的代码又可以写成:

task (hello) {
    println("Hello world");
}
Copy 任务

构建工具不是为了输出 Hello world 的,是为了把一个个简单的 task 关联成一个大的构建任务。下面来写一个 Copy 的 task.

首先先在工程里面创建一个 src 的文件夹,并创建一个 test.txt, 随便写一点儿内容。

然后将 build.gradle 脚本修改成如下:

task copy(type: Copy) {
    from "src"
    into "dest"
}

然后执行命令:

./gradlew copy

会发现在工程目录多了一个 dest 文件夹,里面有一个相同的文件 test.txt


以上是关于Gradle 之初相识的主要内容,如果未能解决你的问题,请参考以下文章

Gradle 引入本地定制 jar 包

Freeline:Gradle工程上如何进行增量编译?

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

如何添加jcenter仓库 gradle依赖

代码相识度检测工具

如何防止Android studio格式化build.gradle