gradle 用戶手冊 第2章 概覽


目錄:
2.1 特性
2.2 爲啥選擇Groovy?


2.1 特性

下面是Gradle的一些特性


聲明式build和按約定build

Gradle的核心部分有一個基於Groovy的富擴展性的領域特定語言(DSL)。通過提供能夠靈活組合的聲明式語言元素,Gradle將聲明式build提高到一個更高的層次。這些元素同時爲Java,Groovy,OSGi,Web和Scala項目提供了約定式build。而且,這個聲明式語言是可擴展的。大家可以添加自己想要的語言元素,或者對已有的元素進行修改或者增強,這樣就能夠提供簡約,可維護性且可理解的build。

基於依賴編程的語言

聲明式語言以通用任務圖爲先決條件,這樣大家就可以很容易的定義自己的build。聲明式語言爲Gradle滿足各種需求提供了最大的靈活性。

設計自己的build

Gradle豐富而靈活的特性能夠讓大家把通用的設計遠離應用到自己的build中去。比如,大家可以很容易的將一些可重複使用的build邏輯添加到自己的build中。我們不提倡一些內部的不必要的引用。不要把一些原本是一個邏輯的東西強制拆開(比如項目的繼承)。盡力避免那些破壞build維護性的漫無目的的或者有分歧的變動。如果秉着這種態度,大家就可以構建一個結構良好,易於維護,通俗易懂的build。

全面而深入的API

由於Gradle的易用性,是植根於在整個build過程執行時的 hook(hook可以在build過程中注入一些其他的動作)的,因此Gradle允許大家對其內核進行監控,定製配置以及定製執行方式。

Gradle的伸縮性

Gradle具有良好的伸縮性(不因項目過大而性能驟降)。不管小項目還是大項目亦或是多模塊項目的build,Gradle都能極大的提高大家的生產力。Gradle能夠提升build的構建。當然,由於高水準的增量build功能,Gradle同樣能夠解決很多大公司級別的build的性能痛點。

多模塊項目build

Gradle對多模塊項目的build有着非常優秀的支持。Gradle天生支持項目依賴。Gradle能夠讓大家在自己的問題領域,按照實際需求來維護一個多模塊項目build中各個項目之間的關係。Gradle是按照大家的項目佈局要求來做的,這可不是空喊口號。
Gradle提供了分塊build的功能。比如大家想單獨build一個子項目(模塊),
Gradle會爲大家自動構建這個子項目所依賴的其他子項目。當然,大家也可以重新
構建依賴某個指定子項目的子項目。這個特性和增量build一起,爲大項目的
構建節省很多時間。

管理依賴的多種方式

不同的項目組喜歡不同的方式來管理自己的外部依賴。Gradle提供了很容易方式來支持不同的依賴策略。不論是基於遠程maven或者Ivy倉庫的傳遞性依賴管理,還是依賴於本地系統目錄的方式,Gradle都是支持的。

Gradle是第一個build整合工具

Gradle完全支持ant的task,更有趣的是,Gradle同樣完全支持ant項目,Gradle能夠
在運行時把ant 的target轉換成Gradle的的task。大家可以在Gradle中依賴ant項目,也可以通過Gradle來增強ant,甚至可以再Gradle 的build.xml中聲明Gradle 的task對ant的依賴。這種整合對properties,paths等都是有效的。

輕鬆的遷移

Gradle適用於各種結構的項目。因此大家可以在項目的分支上直接用Gradle來構建,而且該構建可以和項目同時升級或者修改。我們建議大家最好測試一下構建出來的包是否相似,以保證可靠性。這種遷移方式減少了對項目的破壞性,同時提高了可靠性。這遵循了通過最小改動來獲取最好體驗的準則。

Groovy

Gradle的build腳本是不是用XML,而是用Grvooy來寫的。選取這種方式並非爲了展示動態語言全新的腳本能力。這中方式反而加大了維護build的難度。Gradle的定位不是爲了成爲一個死板的框架,是朝着成爲一種構建語言來發展的。而Groovy成爲了用Gradle的架構來構建不同的項目的粘合劑。Gradle提供了幾個通用性的標準的格式。這就是我們和其他聲明式build系統最大的不同。我們對Groovy的支持不是僅僅在語法糖層面的,而是將整個Gradle的api都全部Groovy化了。使用Groovy爲我們帶來了一個高產且輕鬆的體驗。

Gradle wrapper(Gradle包裝)

Gradle wrapper 可以保證Gradle的build在沒有安裝Gradle的機器上運行。這對持續集成的模版是很有用的。這也可以降低構建開源項目難度。這個包裝對公司來說很有意思。他能夠保證客戶機上零管理運行。包裝能夠強制項目使用指定的Gradle版本,從而降低支持相關問題。

免費和開源

Gradle是開源項目,許可證是註冊在ASL(The Apache Software License)下的。

2.2爲什麼選擇Groovy?

我們認爲internal DSL (基於動態語言)作爲構建腳本比XML作爲動態腳本要有很大的優勢。現在有很多動態語言,爲啥我們選擇Groovy呢?答案就在Gradle要操作的內容裏面。雖然說Gradle的內核是一個通用的構建工具,但還是主要針對於java項目,而Java項目組成員肯定對Java是相當熟悉的,我們認爲一個build對項目組的成員應該越容易越好。
這時,大家可能會說,爲啥不用Java來當作build腳本的語言呢?我們覺得這時一個很正當的問題。Java固然對小組成員來說特別容易,而且學習難度極低。但是由於Java本身的限制,Java作爲構建語言不會像她作爲編程語言那樣優美和強力有效。像Python,Goovy,Ruby這類型的語言反而能夠提供更好的作用。我們選擇Grvooy是因爲這是目前爲止對Java開發人員來說最容易使用的動態語言。Groovy的語法,包結構,系統類型還有其他一些特性都和Java一樣。Groovy通過以Java爲基礎,還提供了很多其他特性。

對於有着Ruby或者Python經驗或者想學習她們的Java開發人員來說,上述討論並沒有太大的意義。Gradle設計之初就是能很好的兼容其他腳本引擎(比如Ruby和Python)。只是現在這不是我們最關心的。但我們很樂意爲任何想要爲Gradle添加新的構建腳本引擎的社區提供支持。


[1],在http://www.defmacro.org/ramblings/lisp.html 大家可以看到有關比較 Ant,XML,Java和Lisp的文章。有趣的是,文章有提到'如果Java擁有那種語法(會比較好)',而Groovy恰恰就有這這中語法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章