Gradle 入門教程(一):Gradle是什麼

這是一篇Gradle的入門教程

一、 Gradle是什麼

1.1 構建工具

要解釋Gradle是什麼,首先要搞清楚一個名詞——構建工具(Build Tool)

構建工具,顧名思義就是用於構建(Build)的工具,構建包括編譯(Compile)、連接(Link)、將代碼打包成可用或可執行形式等等。

如果不使用構建工具,那麼對於開發者而言,下載依賴、將源文件編譯成二進制代碼、打包等工作都需要一步步地手動完成。但如果使用構建工具,我們只需要編寫構建工具的腳本,構建工具就會自動地幫我們完成這些工作。

1.2 常用構建工具一覽

java生態圈的三大構建工具:

  • Ant :2000年發佈,純java語言編寫,具有良好的跨平臺性,用buil.xml文件來配置,需要搭配Apache lvy工具來實現網絡依賴管理。 Ant是程序式的構建工具,需要自定義構建過程,優點是對於構建過程有良好的控制性
  • Maven :2004年發佈,對Ant進行了改進,用prom.xml文件來配置。但與Ant不同的是,Maven是申明式的構建工具,對目錄結構有約束,不需要自定義構建過程,配置較爲簡單。Maven還具有生命週期,更重要的是Maven內置了依賴管理
  • Gradle :2012年發佈,Gradle結合了前兩者的優點,在此基礎之上做了很多改進。它具有Ant的強大和靈活,又有Maven的生命週期管理且易於使用 。 Gradle不用XML,它使用基於Groovy的專門開發的DSL,所以它的配置文件更加簡潔。它跟ant一樣,使用了ivy作爲jar包的依賴管理工具

Gradle、Ant、Maven比較

1.3 Gradle概述

Gradle是一個開源的自動構建工具,它在設計之初就是爲了能夠靈活地構建幾乎所有類型的應用。以下是他的一些重要特性:

  • 高性能:Gradle使用了緩存機制來加快構建
  • 基於JVM:Gradle是基於JVM的工具,這對於熟悉Java的開發者來說是一件好事,因爲你可以使用標準的Java APIs 在你的構建邏輯中,比如自定義的task或插件。這同時也使得Gradle可以輕易地實現跨平臺。
  • 聲明式(Conventions):Gradle汲取了Maven的長處,以Java項目爲例,只要將合適的文件放在合適的地方,應用合適的插件就可以簡單地執行構建
  • 擴展性:Gradle具有良好的可擴展性,你可以通過自定義task types或甚至自定義build model來拓展Gradle。例如Android的構建工具就引入了許多新的構建概念例如flavours和build types
  • IDE支持,幾個主流的IDE都支持導入Gradle構建並且通過圖形化界面的方式與Gradle進行交互。

1.4 Gradle的Projects和tasks

ProjectsTasks是Gradle中最重要的兩個概念。

  • 任何一個Gradle構建都是由一個或多個projects組成的,projects其實就是Idea、AndroidStudio中的Module

  • tasks顧名思義就是任務,它是Gradle中的原子性操作,如編譯、打包、生成javadoc等,一個project中會有多個tasks

我們用Idea新建一個用Gradle構建的Java工程,在右邊的Gradle面板中就可以看到我們當前項目中的projects以及每個peoject中的tasks:(裏面的tasks包括了Gradle內置tasks以及java插件的tasks)

在這裏插入圖片描述
還可以在命令行下執行gradle tasks查看當前可執行的tasks

1.5 學習Gradle需要知道的五件事情

1.5.1 通用性

Gradle設計之初就是一個通用的構建工具,它允許你用它來構建任何應用,唯一的限制是Gradle的遠程依賴管理目前僅支持Maven和Ivy的倉庫

1.5.2 基於tasks

Gradle的構建模塊是基於task的,Gradle要做的就是按照task之間的依賴關係來組織task按照合適的順序運行

1.5.3 Gradle有三個固定的構建步驟

Gradle評估(evaluate)和指定構建腳本時有三個固定步驟:

  1. 初始化(Initialization): 初始化構建所需的運行環境,並檢查哪些projects參與構建
  2. 配置(Configuration): 將tasks組織起來,決定它們按何種順序執行
  3. 執行(Execution): 執行tasks

這些步驟來自於Build Lifecycle(詳見後文)

1.5.4 Gradle 在很多方面都可以擴展

雖然Gradle希望你僅通過Gradle內置的邏輯就可以完成構建,但這在實際中幾乎是不可能的,所以Gradle提供了集中方式以供你來擴展它:

  • 自定義task types
  • 自定義task actions
  • projectstasks中指定額外的屬性
  • 自定義conventions
  • custon model

這一節僅作介紹,後面的章節會詳細講述

參考內容

什麼是構建工具

Java構建工具:Ant vs Maven vs Gradle

自定義Gradle插件進階

W3Cschool

Gradle User Manual

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章