Gradle简介

参见:http://www.imooc.com/wiki/gradlebase/Signature.html

1. 什么是 Gradle?

Gradle 是专注于灵活性和性能的开源构建自动化工具。Gradle 构建脚本是使用 Groovy 或 Kotlin DSL 编写的。 说白了,Gradle 就是一个自动化的项目构建工具,用来帮助我们自动构建项目。

2. 为什么要使用 Gradle?

2.1 自动化构建

有了自动化构建工具只需要一个命令或是点一个按钮就可以打出 jar包。

2.2 Gradle 优点

前面说到 Gradle 是一个自动化构建工具,那么我们下面对比一同类构建工具和 Gradle 相比的优缺点。

1. Apache Ant


Ant 全称是Another Neat Tool,它是由 James Duncan Davidson 开发的,最初是用来构建 Tomcat 的。发布于 2000 年,它的核心代码是由 Java 编写的因此具有平台无关性。构建脚本是 XML(build.xml)。在早期用 Eclipse 开发的 Android 的时候,构建工具就是 Ant。它的构建脚本有三个节点 project、target、task。
但是它有以下缺点:

  1. 无法实时获取运行信息;
  2. 在项目规范上规范性不足,灵活性太高,对 build.xml 没有约定规范;
  3. XML 作为构建脚本,如果项目构建较为复杂,build.xml 就会很长,难以维护。

    2. Apache Maven


    为了解决开发人员在使用 Ant 时面临的问题,Apache 在 2004 年发布了 Maven。Maven 除了项目构建功能外,还提供了高级项目管理工具。最初在 Jakata Turbine 项目中用来简化构建过程。Maven 和 Ant 针对项目构建的两个不同方面解决问题,Ant 是为 Java 项目提供平台构建任务,而 Maven 本身描述项目的高级方面。
    Maven 同样有以下缺点:

  4. XML 还是会很长: 它还是以 XML 作为构建脚本,如果项目复杂,XML 还是会很长,但是较 Ant 比较好维护;

  5. 缺乏灵活性: 规范性太强,缺乏灵活性,会写很多冗余配置;
  6. 链接仓库不方便: 链接国外 Maven 仓库不方便,要切换至国内阿里云的 Maven 仓库。

    总而言之,我们来总结一下:

    Gradle 它是一个构建工具,采用 Groovy 或是 Kotlin 语言编写,汲取了 Ant 和 Maven 的优点,但是相比较于 Ant 和 Maven,Gradle 更加强大,高度可定制,构建更加快速。
    目前我们开发中,Java 项目一般都用 IntelliJ IDEA,它自带的构建工具是 Maven,也可以使用 Ant。Android 项目默认构建工具一般都是使用 Gradle 的,也是 Google 推荐的 Android 构建工具。我觉得后期 Java 也有可能会使用 Gradle 构建工具。因为 Gradle 它集各家之所长,既吸收了 Maven 的规范化和仓库概念,又吸收了 Ant 的 task 思想。

    构建自己的 Gradle 工程

    1. Gradle 的安装

    我们安装 Gradle 之前首先要确保我们已经在系统中安装了 JDK,并且 JDK 的版本最低在 1.7。注意最新的 Gradle 版本需要 JDK1.8 及以上。

1.Gradle下载

首先我们需要在Gradle官网下载自己需要的版本的包,如图所示选择binary-only 。本教程使用的是 v7.1 版本
image.png

2.环境变量配置(mac)

  • 打开环境变量配置

    1. vim ~/.bash_profile
  • gradle环境配置

    1. #GRADLE
    2. GRADLE_HOME=/Users/yaol/Desktop/tools/gradle-7.1
    3. export PATH=$PATH:$GRADLE_HOME/bin
  • 刷新环境配置

    1. source ~/.bash_profile
  • 测试

gradle -v

image.png

Gradle Wrapper 详解

1. 什么是 Gradle Wrapper?

官方建议任何 Gradle 构建方法在 Gradle Wrapper 帮助下运行。Gradle Wrapper 它是一个脚本,调用了已经声明的 Gradle 版本,并且我们编译时需要事先下载它。所以,开发者能够快速的启动并且运行 Gradle 项目,不用再手动安装,从而节省了时间成本。 我们可以称 Gradle Wrapper 为 Gradle 包装器,是将 Gradle 再次包装。让所有的 Gradle 构建方法在 Gradle 包装器的帮助下运行。

2. 为什么需要 Gradle Wrapper?

日常开发中肯定都是一个团队在开发,如果没有 Gradle Wrapper 的话,那么团队中每来一个新同事,就需要在电脑中安装 Gradle 环境。但是有时候我们不同项目 Gradle 的版本又是不一样的,这就为我们的开发工作带来了不便。 于是乎 Gradle 就提供了 Gradle Wrapper,可以让我们的电脑中不安装 Gradle 环境也可以运行 Gradle 项目。这就是上面官方介绍中所说的 Gradle 是一个脚本,调用事先声明的 Gradle 版本,编译前去下载它,这样我们的电脑中就不用再去手动安装 Gradle 环境了,从而间接的提高了我们的开发效率。 从前面一节课我们可以看到 AndroidStudio 创建项目时默认会创建 Gradle Wrapper 目录,这也就是我们不用去手动安装 Gradle 环境的原因。Gradle Wrapper 的工作流程图如下:

Gradle - 图4


它的流程主要分为 3 步走: 首先当我们刚创建的时候,如果指定的版本没有被下载,就先会去 Gradle 的服务器中下载对应版本的压缩包,下载完成后需要先进行解压缩并且执行批处理文件,后续项目每次构建都会重用这个解压过的 Gradle 版本。

3. 如何构建 Gradle Wrapper?

要想构建 Gradle Wrapper 就必须本地先配置了 Gradle 环境变量,具体的配置方法可以参考《构建自己的 Gradle 工程》中关于 Gradle 环境变量的配置。Gradle 的命令中已经内置了 wrapper 命令,其实就是执行 warpper 任务。该任务就是生成我们前面说的 gradle 文件夹及它的子目录 wrapper 文件夹。

使用Gradle Wrapper构建以的哥工程

  1. #创建一个demo工程
  2. mkdir gradle-demo
  3. #使用gradle wrapper创建一个wraaper工程
  4. gradle wrapper

提示:
image.png
按提示:
gradle wrapper --stacktrace
image.png
创建一个settings.gradle的文件,指定工程名称

  1. rootProject.name = 'gradle-demo'

然后再使用gradle wrapperimage.png
看一下目结构:tree
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle

  • gradle-wrapper.jar: 既然是 jar 包,那么它肯定是包含了 Gradle 运行时的逻辑代码;
  • gradle-wrapper.properties: 这个文件主要负责配置 Gradle wrapper 运行时的属性文件,声明具体使用哪个版本的 Gradle。
    1. distributionBase=GRADLE_USER_HOME
    2. distributionPath=wrapper/dists
    3. distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
    4. zipStoreBase=GRADLE_USER_HOME
    5. zipStorePath=wrapper/dists
    关于每个字段的意思如下:
  1. distributionBase: Gradle 解包后存储的父目录;
  2. distributionPath: distributionBase指定目录的子目录。distributionBase+distributionPath就是 Gradle 解包后的存放的具体目录;
  3. distributionUrl: Gradle 指定版本的压缩包下载地址,升级直接改版本即可;开发大多数是使用idea,开发工具会根据gradle版本自动下载最新版gradle;
  4. zipStoreBase: Gradle 压缩包下载后存储父目录;
  5. zipStorePath: zipStoreBase指定目录的子目录。zipStoreBase+zipStorePath就是 Gradle 压缩包的存放位置。