如下內容爲本人基於官方文檔的翻譯和理解,若是你們有條件能夠直接查看 Gradle 官網:android
Gradle 是一款專一於靈活性和性能的開源構建自動化工具。markdown
Gradle 的build scripts 能夠用Groovy or Kotlin DSL 來寫。由於我是寫 Android 的,日常開發的語言也是 Kotlin,因此我更傾向於用 Kotlin 來寫 Gradle。app
Gradle 主要有如下幾個特色:工具
Gradle容許咱們構建任何的項目,它對構建的內容和應如何完成的工做沒有具體的限制,除此以外惟一的限制就是,添加依賴項管理目前只支持與Maven和Ivy兼容的存儲庫以及文件系統。性能
不過這並不意味着咱們須要作不少工做來建立一個 Gradle。Gradle經過添加約定和通用插件來添加預先構建的功能,使構建通用類型的項目(例如Java Library 和 Android lugin)變得容易。咱們還能夠建立和發佈自定義插件來封裝本身的約定並構建功能。 就好比一個 Android 項目,com.android.application 和 com.andorid.library 插件已經幫咱們作了不少通用的事情,咱們在 Android studio 裏建立項目以後就能夠跑。gradle
Gradle 的核心構建模型是基於TAG(有向無環圖),也就是本質上來講 Gradle 的一次構建就是基於每一個 Tasks 和他們相互之間的依賴關係來建立 TAG,並按序來執行這個 TAG。 下面有兩個例子: 基本上全部的Gradle build 都能抽象成如上圖所示的 TAG,這也就是爲何 Gradle 如此靈活的緣由。
一個 Task 由這三點構成:ui
固然對於一個 task 上面的三個都是可選項,取決於 task 所須要作的事情。例如 standard lifecycle tasks 是沒有 Action 的,他們的做用就是爲了將多個 Task 聚合。spa
你能夠指定具體執行哪個任務,例如:
gradle test
將執行 test 任務。插件
最後一點須要注意的事項是 Gradle 具備健壯的增量構建系統,來加快咱們的 build 速度,因此儘可能避免去執行 clean task 除非真的有必要去執行 clean 任務。翻譯
理想狀況下,若是咱們僅僅可使用 Gradle 捆綁的構建邏輯來構建項目。但這幾乎是不可能的。大多數構建都有一些特殊要求,這意味着咱們須要添加自定義構建邏輯。
當您但願構建完成現有任務沒法完成的工做時,只需編寫本身的任務類型便可。一般最好將自定義任務類型的源文件放在buildSrc目錄或打包的插件中。而後,您能夠像Gradle提供的任何任務同樣使用自定義任務類型。
您能夠經過Task.doFirst()和Task.doLast()方法附加在任務以前或以後執行的自定義構建邏輯。
這些容許您將本身的屬性添加到項目或任務中,而後能夠從您本身的自定義操做或任何其餘構建邏輯中使用它們。額外的屬性甚至能夠應用於您未明確建立的任務,例如Gradle的核心插件建立的任務。
約定是簡化構建的強大方法,所以用戶能夠更輕鬆地理解和使用它們。使用標準項目結構和命名約定的構建(例如Java build)能夠看出這一點。您能夠編寫本身的提供約定的插件-它們只須要爲構建的相關方面配置默認值。
Gradle容許您在任務,文件和依賴項配置以外將新概念引入構建。您能夠在大多數語言插件中看到這一點,這些插件將源集的概念添加到了構建中。構建過程的適當建模能夠大大提升構建的易用性及其效率。