Gradle (一)基础介绍

Gradle 基础介绍

如下内容为本人基于官方文档的翻译和理解,若是你们有条件能够直接查看 Gradle 官网:android


Gradle 是一款专一于灵活性性能的开源构建自动化工具。markdown

Gradle 的build scripts 能够用Groovy or Kotlin DSL 来写。由于我是写 Android 的,日常开发的语言也是 Kotlin,因此我更倾向于用 Kotlin 来写 Gradle。app

Gradle 主要有如下几个特色:工具

  1. 自定义能力强
  2. 构建速度快 (Gradle经过 重用先前执行的输出仅处理已更改的输入并行执行任务来快速完成任务)
  3. 强大: Android 官方推荐的构建工具,并支持多种语言
  4. 基于JVM,因此在使用Gradle 以前必须先安装jdk

Gradle 的核心特性

1.Gradle是通用的构建工具

Gradle容许咱们构建任何的项目,它对构建的内容和应如何完成的工做没有具体的限制,除此以外惟一的限制就是,添加依赖项管理目前只支持与Maven和Ivy兼容的存储库以及文件系统。性能

不过这并不意味着咱们须要作不少工做来建立一个 Gradle。Gradle经过添加约定通用插件来添加预先构建的功能,使构建通用类型的项目(例如Java Library 和 Android lugin)变得容易。咱们还能够建立和发布自定义插件来封装本身的约定并构建功能。 就好比一个 Android 项目,com.android.application 和 com.andorid.library 插件已经帮咱们作了不少通用的事情,咱们在 Android studio 里建立项目以后就能够跑。gradle

2. Gradle 的核心构建模型

Gradle 的核心构建模型是基于TAG(有向无环图),也就是本质上来讲 Gradle 的一次构建就是基于每一个 Tasks 和他们相互之间的依赖关系来建立 TAG,并按序来执行这个 TAG。 下面有两个例子: TAG 基本上全部的Gradle build 都能抽象成如上图所示的 TAG,这也就是为何 Gradle 如此灵活的缘由。
一个 Task 由这三点构成:ui

  1. Action
  2. Input
  3. Output

固然对于一个 task 上面的三个都是可选项,取决于 task 所须要作的事情。例如 standard lifecycle tasks 是没有 Action 的,他们的做用就是为了将多个 Task 聚合。spa

你能够指定具体执行哪个任务,例如:gradle test 将执行 test 任务。插件

最后一点须要注意的事项是 Gradle 具备健壮的增量构建系统,来加快咱们的 build 速度,因此尽可能避免去执行 clean task 除非真的有必要去执行 clean 任务。翻译

3. Gradle build 有三个固定的生命周期
  1. 初始化
    设置 build 的执行环境并决定有些项目参与本次构建
  2. 配置阶段
    根据 tasks 间的执行顺序和依赖关系来生成 TAG。
  3. 执行阶段
    执行 TAG
4. Gradle 支持多种方式的拓展

理想状况下,若是咱们仅仅可使用 Gradle 捆绑的构建逻辑来构建项目。但这几乎是不可能的。大多数构建都有一些特殊要求,这意味着咱们须要添加自定义构建逻辑。

  • 自定义任务类型

当您但愿构建完成现有任务没法完成的工做时,只需编写本身的任务类型便可。一般最好将自定义任务类型的源文件放在buildSrc目录或打包的插件中。而后,您能够像Gradle提供的任何任务同样使用自定义任务类型。

  • 自定义任务动做

您能够经过Task.doFirst()和Task.doLast()方法附加在任务以前或以后执行的自定义构建逻辑。

  • 项目和任务的额外属性

这些容许您将本身的属性添加到项目或任务中,而后能够从您本身的自定义操做或任何其余构建逻辑中使用它们。额外的属性甚至能够应用于您未明确建立的任务,例如Gradle的核心插件建立的任务。

  • 自定义约定

约定是简化构建的强大方法,所以用户能够更轻松地理解和使用它们。使用标准项目结构和命名约定的构建(例如Java build)能够看出这一点。您能够编写本身的提供约定的插件-它们只须要为构建的相关方面配置默认值。

  • 自定义模型

Gradle容许您在任务,文件和依赖项配置以外将新概念引入构建。您能够在大多数语言插件中看到这一点,这些插件将源集的概念添加到了构建中。构建过程的适当建模能够大大提升构建的易用性及其效率。

相关文章
相关标签/搜索