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容許您在任務,文件和依賴項配置以外將新概念引入構建。您能夠在大多數語言插件中看到這一點,這些插件將源集的概念添加到了構建中。構建過程的適當建模能夠大大提升構建的易用性及其效率。

相關文章
相關標籤/搜索