Gradle 理解 (一):Gradle 介绍

Gradle 产生背景

随着敏捷开发实践的崛起,人们从 XML 文件的构建方式,寻求一个可表达且可维护新的构建工具。Gradle就是满足这种需求的新的构建工具。

Gradle 优势

  • Gradle 是基于 JVM 构建工具的新一代版本,它融合了 Ant 跟 Maven 中的优点,并且将其优点发挥更加极致。
  • Gradle 使用了基于 Groovy 的 DSL,摈弃 XML,更加强大跟表达性强。开发者可以使用 Java,Groovy,Kotlin 等语言去编写构建逻辑。
  • Gradle提供了一套依赖管理方式,不仅高度可配置,而且能够 Maven,Ivy 相兼容。Gradle 的依赖管理不仅限于外部库,同时还支持多项目构建,项目之间依赖建模。
  • Gradle 还支持对 Ant 跟 Maven 的构建项目进行无缝迁移。

Gradle 特性

  • 可表达的构建语言和底层API
buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

我们上面看到这些Gradle脚本配置,其实是映射到Gradle API 中的 Project,ScriptHandler 等实例中,并且调用该实例的对应方法。buildscript {}便是对应Project 中的buildscript(Closure configureClosure)函数。

  • gradle 就是 groovy
    Gradle 的 DSL 语言就是用 Groovy 实现的,具有很强的可读性跟表达性。开发者可以用熟悉的编程语言表达需要的构建。

  • 灵活的约定
    Gradle 最主要的思想就是给予引导和有意义的默认值。也就是默认约定项目构建中源代码,单元测试,资源文件等存放目录以及功能等,而且编译代码,运行单元测试,发布代码等操作默认都集成到了构建生命周期中,只需要简单配置便可以实现。开发者并不需要知道这里面是如何实现的,只需要知道如何配置即可。Gradle 不仅默认配置好,而且还允许你打破这种约定,根据自己需求改变
    相应的默认构建配置以及项目结构。

  • 强大的依赖管理
    Gradle 提供了一个基础设施去管理解析,获取和存储依赖的复杂性。Maven这样的依赖管理器他们的缓存管理是有缺陷的,当依赖版本发生变化的时候,常常会因为无法识别最新版本导致难于调试或者构建失败。Gradle 为此提供了可配置,可靠有效的依赖管理方案。同时,Gradle 还支持子模块依赖,会自动识别出哪个子模块的依赖需要重新构建,而不需要将子模块的文件缓存到本地缓存中。

  • 可扩展的构建
    Gradle 支持通过指定的任务输出和输入进行增量性构建。同时 Gradle 还可以以守护模式运行,提高启动效率,缩短编译时间。

  • 轻松的可拓展性
    如果要在项目构建中拓展相应的业务功能,可以在 Gradle 脚本中实现一个任务(task)来完成。同时还可以通过最强的拓展机制-插件来完成,不仅可以重用而且可以完全 Gradle API,就想写代码一样完成构建业务逻辑。

二.Gradle 入门

1. Gradle 安装部署

以 Windows 电脑为例,Gradle 要在机器上跑起来,需要先在电脑上安装 Java JDK 7 或者更高版本。所以先检查一下你电脑否是配置了 Java 环境,在终端输入以下命令行:

java -version

java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

如果出现以上命令行说明已经本地已经有 Java 环境了。
接下来就需要下载 Gradle。通过下载 链接可以下载到Gradle,在页面选择的时候,binary-only 跟 complete 选项,complete 就是完整版,里面包含文档跟源码,而 binary-only 只有 gradle 运行的基本东西。当然你也可以在线看文档源码
下载完成之后,通过解压,并且把bin目录下的路径配置到环境变量 path 中。配置完成之后,通过终端命令行进行校验:
gradle -v

------------------------------------------------------------
Gradle 4.4
------------------------------------------------------------

如果出现以上的文字,就说明已经整个 Gradle 配置完成了。

2. Gradle 简单使用

Gradle 构建脚本的默认名称是 build.gradle,当终端执行 gradle 命令行的时候,Gradle 就会默认寻找 build.gradle 的文件。接下来我们就实现一个简单的 HelloWord 的例子。

首先创建一个 build.gradle 文件,输出以下内容

task helloWord {
  doLast {
    println " Gradle HelloWord"
  }
}

在文件目录下,终端执行命令行:

gradle helloWord

得到结果:

> Task :helloWord
 Gradle HelloWord

到这里我们就简单完成一个小示例了。如果觉得一脸懵逼的话,先不着急,我先大致简单讲解一下。

很多开发者会把这个这个 task 理解成一个类型,把 helloWord 理解成这个变量的名字。如果这样理解的话,helloWord 大括号里面的内容就完成不符合我们平时学的编程语言的语法了。其实正确应该这么立即理解:

我给你换个写法,你估计就一下子焕然大悟了

task (helloWord, {
  doLast {
    println " Gradle HelloWord 1111"
  }
})

没错,task() 其实就是一个函数 。这里面需要一个 String 的参数跟一个闭包,函数作用就是执行闭包的代码。不熟悉闭包的也不要紧,这里简单理解成一个函数就可以了,跟 Java 的匿名内部类有些相似。这样我们就很好理解了,其实我们创建 task,就是调用一个函数这么简单。现在想想,以前不懂这些机制,也能对一些配置进行修改跟添加,这就是 DSL 语言最大的好处了吧。

3. Gradle 命令行

虽然通过 IDE 的可视化操作可以很简单操作 gradle 命令行,但是如果能对 gradle 命令行进行深入理解,对以后理解构建也会有很大的帮助。

3.1 列出项目中的可用

gradle tasks

> Task :tasks

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Build Setup tasks
-----------------
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.

Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project 'code'.
components - Displays the components produced by root project 'code'. [incubating]
dependencies - Displays all dependencies declared in root project 'code'.
dependencyInsight - Displays the insight into a specific dependency in root project 'code'.
dependentComponents - Displays the dependent components of components in root project 'code'. [incubating]
help - Displays a help message.
model - Displays the configuration model of root project 'code'. [incubating]
projects - Displays the sub-projects of root project 'code'.
properties - Displays the properties of root project 'code'.
tasks - Displays the tasks runnable from root project 'code'.

To see all tasks and more detail, run gradle tasks --all

To see more detail about a task, run gradle help --task <task>

通过以上可以看到罗列很多 task,类似 buildEnvironment,components等这些就是可用的 task。当然你通过执行 helloWord 一样去校验一下。这里需要注意一下:

Build Setup tasks
Help tasks

我们可以看到这列,其实这是分组的意思,就是 Build Setup 组以下有init,wrapper 等 task。

3.2 查看使用帮助

gradle --help

通过这个命令行,可以查询到相关的命令行操作说明。

3.3 task 名字缩写

Gradle 有一个很有用的特性就是能以驼峰缩写的形式执行 task。以我们刚才的 helloWord task 为例,我们可以执行 gradle hW 也是达到同样的效果。但是这要目的一点,缩写的形式形式必须是唯一的,否则无法执行。比如你再创建一个 helloWordddd 的 task,这样是无法执行 gradle hW 缩写的。

3.4 守护进程

Gradle 有一个很强的特性就是守护进程。Gradle 3.0 以后守护进程默认启用。守护进程就是复利用上一次构建的计算来提高本次的构建速度 ,以避免启动时的开销,加快编译速度。通过 helloWord 为例:

gradle helloWord --daemon

这样就开启守护运行 task。如果要关闭的话,则执行

gradle helloWord --no–daemon

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值