Gradle【從無到有從有到無】【用戶手冊】【G1】什麼是Gradle?

目錄

總覽

1.高性能

2.JVM基礎

3.約定

4.可擴展性

5.IDE支持

6.洞察力

您需要了解有關Gradle的五件事

1.Gradle是通用的構建工具

2.核心模型基於任務

3.Gradle有幾個固定的構建階段

4.Gradle的擴展方式不止一種

5.構建腳本針對API運行


總覽

Gradle是一個開放源代碼的構建自動化工具,旨在靈活地構建幾乎任何類型的軟件。以下是其一些最重要功能的高級概述:

1.高性能

Gradle通過僅運行需要運行的任務來避免不必要的工作,因爲它們的輸入或輸出已更改。您還可以使用構建緩存來重用以前運行的任務輸出,甚至可以重用其他機器(帶有共享構建緩存)的任務輸出。

Gradle實施了許多其他優化,並且開發團隊不斷努力提高Gradle的性能。

2.JVM基礎

Gradle在JVM上運行,並且必須安裝Java開發工具包(JDK)才能使用它。對於熟悉Java平臺的用戶來說,這是一個好處,因爲您可以在構建邏輯中使用標準Java API,例如自定義任務類型和插件。它還使在不同平臺上運行Gradle變得容易。

請注意,Gradle不僅限於構建JVM項目,它甚至附帶對構建本機項目的支持。

3.約定

Gradle從Maven的書中摘取了葉子,並通過實現約定使常見類型的項目(例如Java項目)易於構建。應用適當的插件,您可以輕鬆地爲許多項目使用苗條的構建腳本。但是這些約定並不限制您:Gradle允許您覆蓋它們,添加自己的任務以及對基於約定的構建進行許多其他自定義。

4.可擴展性

您可以輕鬆擴展Gradle以提供您自己的任務類型甚至構建模型。有關此示例,請參見Android構建支持:它添加了許多新的構建概念,例如口味和構建類型。

5.IDE支持

幾個主要的IDE允許您導入Gradle構建並與其進行交互:Android Studio,IntelliJ IDEA,Eclipse和NetBeans。Gradle還支持生成將項目加載到Visual Studio所需的解決方案文件。

6.洞察力

構建掃描提供了有關構建運行的廣泛信息,可用於識別構建問題。他們特別擅長幫助您確定構建性能的問題。您還可以與其他人共享構建掃描,如果您在解決構建問題時需要徵求意見,這將特別有用。

 

您需要了解有關Gradle的五件事

Gradle是一種靈活而強大的構建工具,當您初次啓動時,很容易感到恐懼。但是,瞭解以下核心原則將使Gradle更加容易上手,並且您將在不知道該工具的情況下熟練掌握該工具。

 

1.Gradle是通用的構建工具

Gradle允許您構建任何軟件,因爲它對正在嘗試構建的內容或應如何完成的工作做出很少的假設。最明顯的限制是,依賴項管理當前僅支持與Maven和Ivy兼容的存儲庫以及文件系統。

這並不意味着您需要做很多工作來創建構建。Gradle通過添加一層約定和通過插件預先構建的功能,可以輕鬆構建常見類型的項目(例如Java庫)。您甚至可以創建和發佈自定義插件來封裝自己的約定並構建功能。

 

2.核心模型基於任務

Gradle將其構建模型建模爲任務(工作單元)的有向無環圖(DAG)。這意味着構建實質上配置了一組任務,並根據它們的依賴關係將它們連接在一起以創建該DAG。創建任務圖後,Gradle將確定需要按順序運行的任務,然後繼續執行它們。

此圖顯示了兩個示例任務圖,一個是抽象圖,另一個是具體圖,其中任務之間的依賴性表示爲箭頭:

圖1. Gradle任務圖的兩個示例

這樣,幾乎所有構建過程都可以建模爲任務圖,這就是Gradle如此靈活的原因之一。任務圖既可以由插件定義,也可以由您自己的構建腳本定義,任務通過任務依賴機制鏈接在一起。

任務本身包括:

  • 動作(Actions)-做某事的工作,例如複製文件或編譯源代碼

  • 輸入(Inputs)-操作使用或對其進行操作的值,文件和目錄

  • 輸出(Outputs)-操作修改或生成的文件和目錄

實際上,以上所有內容都是可選的,具體取決於任務需要執行的操作。有些任務(例如標準生命週期任務)甚至沒有任何動作。他們只是爲了方便而將多個任務聚合在一起。

✨您選擇要運行的任務。通過指定執行所需任務的任務來節省時間,但僅此而已。如果您只想運行單元測試,請選擇執行該任務的任務-通常爲test。如果要打包應用程序,則大多數構建都有一個assemble任務。

最後一件事:Gradle的增量構建支持是可靠且可靠的,因此,clean除非您確實想執行清理工作,否則避免執行該任務以保持構建快速運行。

 

3.Gradle有幾個固定的構建階段

重要的是要了解Gradle分三個階段評估和執行構建腳本:

  1. 初始化

    設置構建環境,並確定哪些項目將參與其中。

  2. 組態

    構造和配置用於構建的任務圖,然後根據用戶要運行的任務確定需要運行的任務和順序。

  3. 執行

    運行在配置階段結束時選擇的任務。

這些階段構成了Gradle的Build Lifecycle

✨與Apache Maven術語的比較

Gradle的構建階段與Maven的階段不同。Maven使用其階段將構建執行劃分爲多個階段。它們的作用與Gradle的任務圖相似,但靈活性較差。

Maven的構建生命週期概念與Gradle的生命週期任務大致相似。

設計良好的構建腳本主要由聲明性配置而不是命令式邏輯組成。可以理解,在配置階段評估該配置。即便如此,許多此類構建也具有任務操作(例如,通過doLast {}doFirst {}塊),這些任務在執行階段進行評估。這很重要,因爲在配置階段評估的代碼不會看到在執行階段發生的更改。

配置階段的另一個重要方面是,每次構建運行時都會評估其中涉及的所有內容。這就是爲什麼最佳做法是在配置階段避免昂貴的工作構建掃描可以幫助您識別此類熱點。

 

4.Gradle的擴展方式不止一種

如果您可以僅使用Gradle捆綁的構建邏輯來構建項目,那將是很好的,但這幾乎是不可能的。大多數構建都有一些特殊要求,這意味着您需要添加自定義構建邏輯。

Gradle提供了多種機制來擴展它,例如:

  • 自定義任務類型

    當您希望構建完成現有任務無法完成的工作時,只需編寫自己的任務類型即可。通常最好將自定義任務類型的源文件放在buildSrc目錄或打包的插件中。然後,您可以像Gradle提供的任何任務一樣使用自定義任務類型。

  • 自定義任務操作。

    您可以通過Task.doFirst()Task.doLast()方法附加在任務之前或之後執行的自定義構建邏輯。

  • 項目和任務的額外屬性

    這些允許您將自己的屬性添加到項目或任務中,然後可以從您自己的自定義操作或任何其他構建邏輯中使用它們。額外的屬性甚至可以應用於您未明確創建的任務,例如Gradle的核心插件創建的任務。

  • 自定義約定。

    約定是簡化構建的強大方法,因此用戶可以更輕鬆地理解和使用它們。使用標準項目結構和命名約定的構建(例如Java build)可以看出這一點。您可以編寫自己的提供約定的插件-它們只需要爲構建的相關方面配置默認值。

  • 自定義模型

    Gradle允許您將新概念引入除任務,文件和依賴項配置之外的內部版本。您可以在大多數語言插件中看到這一點,這些插件將源集的概念添加到了構建中。構建過程的適當建模可以大大提高構建的易用性及其效率。

 

5.構建腳本針對API運行

將Gradle的構建腳本視爲可執行代碼很容易,因爲這就是它們。但這只是一個實現細節:精心設計的構建腳本描述了構建軟件所需的步驟,而不是這些步驟應如何工作。 這是定製任務類型和插件的工作。

✨人們普遍誤認爲Gradle的功能和靈活性來自其構建腳本是代碼這一事實。這離事實還遠。提供功能的是底層模型和API。正如我們在最佳實踐中建議的那樣,您應該避免在構建腳本中放置太多(如果有)命令式邏輯

然而,在一個區域中,將構建腳本視爲可執行代碼很有用:瞭解構建腳本的語法如何映射到Gradle的API。由Groovy DSL參考Javadocs組成的API文檔列出了方法和屬性,並引用了閉包和操作。這些在構建腳本的上下文中是什麼意思?查看Groovy Build Script Primer,以瞭解該問題的答案,以便您可以有效地使用API​​文檔。

✨由於Gradle在JVM上運行,因此構建腳本也可以使用標準Java API。Groovy構建腳本可以另外使用Groovy API,而Kotlin構建腳本可以使用Kotlin。

 

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