第二章 概述

第二章 概述

目錄

2.1. 特征
2.2. 為什么選擇Groovy?

2.1. 特征

這里是一些Gradle的功能列表。

  • 聲明式構(gòu)建和按照慣例構(gòu)建
    Gradle的核心是一個(gè)基于Groovy的豐富的可擴(kuò)展域特定語(yǔ)言(DSL)。Gradle通過(guò)提供聲明式語(yǔ)言元素,將聲明式構(gòu)建推向下一個(gè)層次,您可以隨意組合。這些元素還為Java,Groovy,OSGi,Web和Scala項(xiàng)目提供了逐個(gè)會(huì)議的支持。甚至更多,這種說(shuō)明性的語(yǔ)言是可擴(kuò)展的。添加您自己的新語(yǔ)言元素或增強(qiáng)現(xiàn)有語(yǔ)言元素,從而提供簡(jiǎn)潔,可維護(hù)和易于理解的構(gòu)建。

  • 用于依賴(lài)編程的語(yǔ)言
    聲明性語(yǔ)言位于通用任務(wù)圖之上,您可以充分利用您的構(gòu)建。它提供了極大的靈活性,使Gradle適應(yīng)您的獨(dú)特需求。

  • 構(gòu)建你的構(gòu)建
    Gradle的靈活性和豐富性最終使您可以將常用的設(shè)計(jì)原則應(yīng)用于您的構(gòu)建。例如,從構(gòu)建邏輯的可重用部分組成構(gòu)建是非常容易的。內(nèi)聯(lián)的東西,不必要的indirections是不合適的。不要被強(qiáng)迫拆散屬于一起的東西(例如在你的項(xiàng)目層次結(jié)構(gòu)中)。避免像霰彈槍的變化或不同的變化,把你的構(gòu)建成為維修噩夢(mèng)的氣味。最后,您可以創(chuàng)建一個(gè)結(jié)構(gòu)良好,易于維護(hù),易于理解的構(gòu)建。

  • 深度API
    從被嵌入到構(gòu)建執(zhí)行的整個(gè)生命周期的許多鉤子中,Gradle允許你監(jiān)視和定制其配置和執(zhí)行行為到其核心。

  • Gradle秤
    Gradle比例很好。它顯著提高了您的生產(chǎn)力,從簡(jiǎn)單的單一項(xiàng)目建立到龐大的企業(yè)多項(xiàng)目生成。這是構(gòu)建構(gòu)建的真實(shí)情況。借助先進(jìn)的增量構(gòu)建功能,解決許多大型企業(yè)構(gòu)建的性能問(wèn)題也是如此。|

  • 多項(xiàng)目構(gòu)建
    Gradle對(duì)多項(xiàng)目構(gòu)建的支持非常出色。項(xiàng)目依賴(lài)是一等公民。我們?cè)试S您在多項(xiàng)目構(gòu)建中為項(xiàng)目關(guān)系建模,因?yàn)樗鼈兇_實(shí)適合您的問(wèn)題域。Gradle遵循你的布局,反之亦然。

  • Gradle提供了部分構(gòu)建。如果您構(gòu)建一個(gè)子項(xiàng)目,Gradle負(fù)責(zé)構(gòu)建子項(xiàng)目所依賴(lài)的所有子項(xiàng)目。您也可以選擇重建依賴(lài)于特定子項(xiàng)目的子項(xiàng)目。與增量構(gòu)建一起,這對(duì)于大型構(gòu)建來(lái)說(shuō)是一個(gè)很大的節(jié)省時(shí)間。

  • 許多方法來(lái)管理你的依賴(lài)關(guān)系
    不同的團(tuán)隊(duì)更喜歡不同的方式來(lái)管理他們的外部依賴(lài)。Gradle為任何策略提供了便利的支持。從遠(yuǎn)程Maven和Ivy存儲(chǔ)庫(kù)的傳遞依賴(lài)管理到本地文件系統(tǒng)上的jar或目錄。

  • Gradle是第一個(gè)構(gòu)建集成工具
    螞蟻任務(wù)是一等公民。更有趣的是,螞蟻?lái)?xiàng)目也是一流的公民。Gradle為任何Ant項(xiàng)目提供了深入的導(dǎo)入,在運(yùn)行時(shí)將Ant目標(biāo)轉(zhuǎn)換為本地Gradle任務(wù)。您可以從Gradle中依賴(lài)它們,您可以從Gradle中增強(qiáng)它們,甚至可以在build.xml中聲明對(duì)Gradle任務(wù)的依賴(lài)關(guān)系。為屬性,路徑等提供了相同的集成。

Gradle完全支持現(xiàn)有的Maven或Ivy存儲(chǔ)庫(kù)基礎(chǔ)結(jié)構(gòu),用于發(fā)布和檢索依賴(lài)關(guān)系。Gradle還提供了一個(gè)將Maven pom.xml轉(zhuǎn)換為Gradle腳本的轉(zhuǎn)換器。Maven項(xiàng)目的運(yùn)行時(shí)導(dǎo)入即將到來(lái)。

  • 易于遷移
    Gradle可以適應(yīng)任何你有的結(jié)構(gòu)。因此,您可以始終在您的生產(chǎn)構(gòu)建所在的同一分支中開(kāi)發(fā)您的Gradle構(gòu)建,并且可以并行演化。我們通常建議編寫(xiě)測(cè)試,確保產(chǎn)生的文物是相似的。這樣遷移就不那么具有破壞性和可靠性。這是遵循通過(guò)應(yīng)用嬰兒步驟進(jìn)行重構(gòu)的最佳實(shí)踐。

  • Groovy的
    Gradle的構(gòu)建腳本是用Groovy編寫(xiě)的,而不是XML。但是與其他方法不同,這不是簡(jiǎn)單地暴露動(dòng)態(tài)語(yǔ)言的原始腳本功能。這只會(huì)導(dǎo)致維護(hù)建設(shè)非常困難。Gradle的整個(gè)設(shè)計(jì)都是作為一種語(yǔ)言來(lái)使用的,而不是一個(gè)僵化的框架。而Groovy是我們的膠水,可以讓你用Gradle(或者你)提供的抽象來(lái)講述你的個(gè)人故事。Gradle提供了一些標(biāo)準(zhǔn)的故事,但他們沒(méi)有任何形式的特權(quán)。與其他聲明式構(gòu)建系統(tǒng)相比,這對(duì)我們來(lái)說(shuō)是一個(gè)重要的特色。我們的Groovy支持不僅僅是糖衣。整個(gè)Gradle API是完全Groovy化的。添加Groovy會(huì)帶來(lái)愉快和高效的體驗(yàn)。

  • Gradle包裝
    Gradle Wrapper允許您在沒(méi)有安裝Gradle的機(jī)器上執(zhí)行Gradle構(gòu)建。這對(duì)于一些持續(xù)集成服務(wù)器來(lái)說(shuō)是有用的。對(duì)于一個(gè)開(kāi)源項(xiàng)目來(lái)說(shuō),保持構(gòu)建它的屏障是很有用的。包裝對(duì)于企業(yè)來(lái)說(shuō)也很有意思。這是客戶(hù)端機(jī)器的零管理方法。它還強(qiáng)制使用特定的Gradle版本,從而最大限度地減少支持問(wèn)題。

  • 自由和開(kāi)源
    Gradle是一個(gè)開(kāi)源項(xiàng)目,并在ASL下獲得許可。

2.2.為什么選擇Groovy?

我們認(rèn)為,在構(gòu)建腳本中使用內(nèi)部DSL(基于動(dòng)態(tài)語(yǔ)言)優(yōu)于XML的優(yōu)點(diǎn)是巨大的。那里有幾種動(dòng)態(tài)語(yǔ)言。為什么選擇Groovy?答案在于Gradle運(yùn)行的環(huán)境。雖然Gradle是一個(gè)通用的構(gòu)建工具,但它的主要焦點(diǎn)是Java項(xiàng)目。在這樣的項(xiàng)目中,團(tuán)隊(duì)成員將非常熟悉Java。我們認(rèn)為一個(gè)構(gòu)建應(yīng)該盡可能的透明給所有的團(tuán)隊(duì)成員。

在這種情況下,您可能會(huì)爭(zhēng)論為什么我們不只是使用Java作為構(gòu)建腳本的語(yǔ)言。我們認(rèn)為這是一個(gè)有效的問(wèn)題。它會(huì)為你的團(tuán)隊(duì)提供最高的透明度和最低的學(xué)習(xí)曲線,但是由于Java的限制,這樣的構(gòu)建語(yǔ)言將不會(huì)像表面上那么好,而且功能強(qiáng)大。[1]像Python,Groovy或Ruby這樣的語(yǔ)言在這里做得更好。我們選擇了Groovy,因?yàn)樗鼮镴ava人提供了最大的透明度。它的基本語(yǔ)法和Java以及它的類(lèi)型系統(tǒng),它的包結(jié)構(gòu)和其他東西一樣。除此之外,Groovy還提供了更多的功能,但是卻擁有Java的通用基礎(chǔ)。

對(duì)于具有Python或Ruby知識(shí)的Java開(kāi)發(fā)人員或希望了解這些知識(shí)的人,上述論點(diǎn)不適用。Gradle設(shè)計(jì)非常適合在JRuby或Jython中創(chuàng)建另一個(gè)構(gòu)建腳本引擎。目前對(duì)我們來(lái)說(shuō),這并不是最重要的。我們高興地支持任何社區(qū)努力創(chuàng)建額外的構(gòu)建腳本引擎。

[1]在http://www.defmacro.org/ramblings/lisp.html,你會(huì)發(fā)現(xiàn)一篇比較有趣的文章,比較Ant,XML,Java和Lisp。有趣的是,如果本文中的“如果Java有這種語(yǔ)法”語(yǔ)法實(shí)際上就是Groovy語(yǔ)法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,869評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,098評(píng)論 25 708
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,941評(píng)論 6 342
  • 閨蜜A要出國(guó)了,那個(gè)自小家境優(yōu)渥,時(shí)常將讀書(shū)無(wú)用掛在嘴邊的小姑娘,竟在畢業(yè)兩年后通過(guò)了雅思考試,順利的拿到了英國(guó)一...
    妖精不睡閱讀 472評(píng)論 0 0
  • 八月十五快到了,日子過(guò)得真快,大半年又悄悄溜走,還沒(méi)有來(lái)的及告別,中秋節(jié)家家戶(hù)戶(hù)都走親訪友,我和我媽也一起去二姥...
    Sharon陽(yáng)光燦爛閱讀 767評(píng)論 0 0