Gradle初步

1、介紹

Gradle是一個基於 JVM 的富有突破性構建工具。java

它爲您提供了:web

  • 一個像 ant 同樣,通用的靈活的構建工具
  • 一種可切換的,像 maven 同樣的基於約定優於配置的構建框架
  • 強大的多工程構建支持
  • 強大的依賴管理(基於 ApacheIvy)
  • 對已有的 maven 和 ivy 倉庫的全面支持
  • 支持傳遞性依賴管理,而不須要遠程倉庫或者 pom.xml 或者 ivy 配置文件
  • ant 式的任務和構建是 gradle 的第一公民
  • 基於 groovy,其 build 腳本使用 groovy dsl 編寫
  • 具備普遍的領域模型支持你的構建

 

2、概述

 

特性列表:

(1)基於聲明的構建和基於約定的構建

Gradle 的核心在於基於 Groovy 的豐富而可擴展的域描述語言(DSL)。 Groovy 經過聲明性的語言元素將基於聲明的構建推向下層,你能夠按你想要的方式進行組合。 這些元素一樣也爲支持 Java, Groovy,OSGi,Web 和 Scala 項目提供了基於約定的構建。 而且,這種聲明性的語言是能夠擴展的。你能夠添加新的或加強現有的語言元素。 所以,它提供了簡明、可維護和易理解的構建。編程

(2)爲以依賴爲基礎的編程方式提供語言支持

聲明性語言優勢在於通用任務圖,你能夠將其充分利用在構建中. 它提供了最大限度的靈活性,以讓 Gradle 適應你的特殊需求。設計模式

(3)構建結構化

Gradle 的靈活和豐富性最終可以支持在你的構建中應用通用的設計模式。 例如,它能夠很容易地將你的構建拆分爲多個可重用的模塊,最後再進行組裝,但不要強制地進行模塊的拆分。 不要把本來在一塊兒的東西強行分開(好比在你的項目結構裏),從而避免讓你的構建變成一場噩夢。 最後,你能夠建立一個結構良好,易於維護,易於理解的構建。閉包

(4)深度 API

Gradle 容許你在構建執行的整個生命週期,對它的核心配置及執行行爲進行監視並自定義。app

(5)Gradle 的擴展

Gradle 有很是良好的擴展性。 從簡單的單項目構建,到龐大的多項目構建,它都能顯著地提高你的效率。 這纔是真正的結構化構建。經過最早進的增量構建功能,它能夠解決許多大型企業所面臨的性能瓶頸問題。框架

(6)多項目構建

Gradle 對多項目構建的支持很是出色。項目依賴是首先須要考慮的問題。 咱們容許你在多項目構建當中對項目依賴關係進行建模,由於它們纔是你真正的問題域。 Gradle 遵照你的佈局。maven

Gradle 提供了局部構建的功能。 若是你在構建一個單獨的子項目,Gradle 也會幫你構建它所依賴的全部子項目。 你也能夠選擇從新構建依賴於特定子項目的子項目。 這種增量構建將使得在大型構建任務中省下大量時間。編程語言

(7)多種方式管理依賴

不一樣的團隊喜歡用不一樣的方式來管理他們的外部依賴。 從 Maven 和 Ivy 的遠程倉庫的傳遞依賴管理,到本地文件系統的 jar 包或目錄,Gradle 對全部的管理策略都提供了方便的支持。工具

(8)Gradle 是第一個構建集成工具

Ant tasks 是最重要的。而更有趣的是,Ant projects 也是最重要的。 Gradle 對任意的 Ant 項目提供了深度導入,並在運行時將 Ant 目標(target)轉換爲原生的 Gradle 任務(task)。 你能夠從 Gradle 上依賴它們(Ant targets),加強它們,甚至在你的 build.xml 上定義對 Gradle tasks 的依賴。Gradle 爲屬性、路徑等等提供了一樣的整合。

Gradle 徹底支持用於發佈或檢索依賴的 Maven 或 Ivy 倉庫。 Gradle 一樣提供了一個轉換器,用於將一個 Maven pom.xml 文件轉換爲一個 Gradle 腳本。Maven 項目的運行時導入的功能將很快會有。

 

(9)易移植

Gradle 能適應你已有的任何結構。所以,你總能夠在你構建項目的同一個分支當中開發你的 Gradle 構建腳本,而且它們可以並行進行。 咱們一般建議編寫測試,以保證生成的文件是同樣的。 這種移植方式會盡量的可靠和減小破壞性。這也是重構的最佳作法。

 

Groovy

Gradle 的構建腳本是採用 Groovy 寫的,而不是用 XML。 但與其餘方法不一樣,它並不僅是展現了由一種動態語言編寫的原始腳本的強大。 那樣將致使維護構建變得很困難。 Gradle 的總體設計是面向被做爲一門語言,而不是一個僵化的框架。 而且 Groovy 是咱們容許你經過抽象的 Gradle 描述你我的的 story 的黏合劑。 Gradle 提供了一些標準通用的 story。這是咱們相比其餘聲明性構建系統的主要特色。 咱們的 Groovy 支持也不是簡單的糖衣層,整個 Gradle 的 API 都是徹底 groovy 化的。只有經過 Groovy才能去運用它並對它提升效率。

The Gradle wrapper

Gradle Wrapper 容許你在沒有安裝 Gradle 的機器上執行 Gradle 構建。 這一點是很是有用的。好比,對一些持續集成服務來講。 它對一個開源項目保持低門檻構建也是很是有用的。 Wrapper 對企業來講也頗有用,它使得對客戶端計算機零配置。 它強制使用指定的版本,以減小兼容支持問題。

自由和開源

Gradle 是一個開源項目,並遵循 ASL 許可。

 

3、爲何使用 Groovy?

咱們認爲內部 DSL(基於一種動態語言)相比 XML 在構建腳本方面優點很是大。它們是一對動態語言。 爲何使用 Groovy?答案在於 Gradle 內部的運行環境。 雖然 Gradle 核心目的是做爲通用構建工具,但它仍是主要面向 Java 項目。 這些項目的團隊成員顯然熟悉 Java。咱們認爲一個構建工具應該儘量地對全部團隊成員透明。

你可能會想說,爲何不能使用 Java 來做爲構建腳本的語言。 我認爲這是一個頗有意義的問題。對大家的團隊來說,它確實會有最高的透明度和最低的學習曲線。 但因爲 Java 自己的侷限性,這種構建語言可能就不會那樣友善、 富有表現力和強大。 [1] 這也是爲何像 Python,Groovy 或者 Ruby 這樣的語言在這方面表現得更好的緣由。 咱們選擇了 Groovy,由於它向 Java 人員提供了目前爲止最大的透明度。 其基本的語法,類型,包結構和其餘方面都與 Java 同樣,Groovy 在這之上又增長了許多東西。可是和 Java 也有着共同點。

對於那些分享和樂於去學習 Python 知識的 Java 團隊而言,上述論點並不適用。 Gradle 的設計很是適合在 JRuby 或 Jython 中建立另外一個構建腳本引擎。 那時候,對咱們而言,它只是再也不是最高優先級的了。咱們很高興去支持任何社區努力建立其餘的構建腳本引擎。

 

 

 

4、安裝Gradle

官網地址爲:https://gradle.org/

 

 成功下載後解壓到某個目錄下,能夠是C盤也能夠是D盤,而後配置對應的環境變量便可,通常是精確到bin目錄

例如:

 

檢驗是否配置好的標準是,打開cmd,輸入 gradle -v,出現以下圖就表示OK

 

5、Gradle構建基礎

Projects 和 tasks

projects 和 tasks是 Gradle 中最重要的兩個概念。

任何一個 Gradle 構建都是由一個或多個 projects 組成。每一個 project 包括許多可構建組成部分。 這徹底取決於你要構建些什麼。舉個例子,每一個 project 或許是一個 jar 包或者一個 web 應用,它也能夠是一個由許多其餘項目中產生的 jar 構成的 zip 壓縮包。一個 project 沒必要描述它只能進行構建操做。它也能夠部署你的應用或搭建你的環境。不要擔憂它像聽上去的那樣龐大。 Gradle 的 build-by-convention 可讓您來具體定義一個 project 到底該作什麼。

每一個 project 都由多個 tasks 組成。每一個 task 都表明了構建執行過程當中的一個原子性操做。如編譯,打包,生成 javadoc,發佈到某個倉庫等操做。

簡單示例(Hello World):

 

budle.gradle

task hello {
    doLast {
        println 'Hello world!'
    }
}

而後在該文件所在目錄執行 gradle -q hello

 

注意:

-q 參數的做用是什麼?

該文檔的示例中不少地方在調用 gradle 命令時都加了 -q 參數。該參數用來控制 gradle 的日誌級別,能夠保證只輸出咱們須要的內容。

 

上面的腳本定義了一個叫作 hello 的 task,而且給它添加了一個動做。當執行 gradle hello 的時候, Gralde 便會去調用 hello 這個任務來執行給定操做。這些操做其實就是一個用 groovy 書寫的閉包。

若是你以爲它看上去跟 Ant 中的 targets 很像,那麼是對的。Gradle 的 tasks 就至關於 Ant 中的 targets。不過你會發現他功能更增強大。咱們只是換了一個比 target 更形象的另一個術語。不幸的是這恰巧與 Ant 中的術語有些衝突。ant 命令中有諸如 javac、copy、tasks。因此當該文檔中說起 tasks 時,除非特別指明 ant task。不然指的均是指 Gradle 中的 tasks。

 

 

 

6、依賴管理基礎

什麼是依賴管理?

通俗來說,依賴管理由以下兩部分組成。首先,Gradle 須要知道項目構建或運行所須要的一些文件,以便於找到這些須要的文件。咱們稱這些輸入的文件爲項目的依賴。其次,你可能須要構建完成後自動上傳到某個地方。咱們稱這些輸出爲發佈。下面來仔細介紹一下這兩部分:

大部分工程都不太可能徹底自給自足,通常你都會用到其餘工程的文件。好比我工程須要 Hibernate 就得把它的類庫加進來,好比測試的時候可能須要某些額外 jar 包,例如 JDBC 驅動或 Ehcache 之類的 Jar 包。

這些文件就是工程的依賴。Gradle 須要你告訴它工程的依賴是什麼,它們在哪,而後幫你加入構建中。依賴可能須要去遠程庫下載,好比 Maven 或者 Ivy 庫。也能夠是本地庫,甚至多是另外一個工程。咱們稱這個過程叫依賴解決

一般,依賴的自身也有依賴。例如,Hibernate 核心類庫就依賴於一些其餘的類庫。因此,當 Gradle 構建你的工程時,會去找到這些依賴。咱們稱之爲依賴傳遞

大部分工程構建的主要目的是脫離工程使用。例如,生成 jar 包,包括源代碼、文檔等,而後發佈出去。

這些輸出的文件構成了項目的發佈內容。Gralde 也會爲你分擔這些工做。你聲明瞭發佈到到哪,Gradle 就會發布到哪。「發佈」的意思就是你想作什麼。好比,複製到某個目錄,上傳到 Maven 或 Ivy 倉庫。或者在其它項目裏使用,這些均可以稱之爲發行

 

 

 

小結:

我爲何學習Gradle,由於好奇。好奇是學習的驅動力。固然了,不只僅是好奇,還有就是不久須要它。爲了未雨綢繆,提早接觸學習。

本文主要參考w3cschool,同時也加上一些本身的理解。主要圍繞介紹、特性、爲何使用groovy、安裝、構建基礎、依賴管理基礎等六個方面。

其中或許有人會疑惑爲何提到groovy,由於gradle就是用groovy寫的。對於groovy,或許有人會問,有必要掌握嗎?我的以爲暫時沒這個必要。若是你以爲gradle某些功能不難知足你的需求,你能夠嘗試學習groovy,利用groovy對於gradle從新改裝,或者是不用groovy,直接用其餘的編程語言編寫比gradle更強大的工具。固然了,本文重要不是說教你怎麼寫一個gradle,而是關於gradle相關的理論知識及其附加的示例,但願能給你們有所幫助。

 

 

本文主要參考:

w3cschool關於Gradle:https://www.w3cschool.cn/gradle/

相關文章
相關標籤/搜索