一、尋找gradle的歷程
一開(kāi)始的時(shí)候,我們只有一個(gè)工程,所有要用到的jar包都放到工程目錄下面,時(shí)間長(zhǎng)了,工程越來(lái)越大,使用到的jar包也越來(lái)越多,難以理解jar之間的依賴(lài)關(guān)系。再后來(lái)我們把舊的工程拆分到不同的工程里,靠ide來(lái)管理工程之間的依賴(lài)關(guān)系,各工程下的jar包依賴(lài)是雜亂的。一段時(shí)間后,我們發(fā)現(xiàn)用ide來(lái)管理項(xiàng)程很不方便,比如不方便脫離ide自動(dòng)構(gòu)建,于是我們寫(xiě)自己的ant腳本。再后來(lái),維護(hù)ant腳本變得痛苦,管理jar包更加痛苦。svn能管理源碼的版本,卻不能管理構(gòu)建出的部署部件的版本。于是我們決定用maven,然而pom.xml的配置實(shí)在太繁了!最后,我找到了神器,gradle!
二、為什么是gradle?
1. groovy 比 xml好用
Gradle用groovy來(lái)做為build腳本,比xml要易讀易用得多。用過(guò)ant的人都知道,要在ant里面表達(dá)一個(gè)if分支功能有多么的麻煩,不直觀。由于gradle的build腳本就是groovy程序,所以做分支循環(huán)等非常方便自然。
2. Convention over Configuration 比寫(xiě)大量ant基礎(chǔ)腳本方便
用ant的時(shí)候,要得定義哪里放源碼,哪里放jar包,哪里放編譯出的class文件等等,每個(gè)項(xiàng)目都要這樣做,非常麻煩。gradle和maven一樣,都定義了一個(gè)默認(rèn)的目錄結(jié)構(gòu),只要按要這個(gè)默認(rèn)的規(guī)則來(lái)做,就不需要多寫(xiě)一行代碼。而且gradle的目錄的結(jié)構(gòu)規(guī)范和maven是一樣的。
3. 支付定義task,比maven靈活
maven可以幫助管理依賴(lài)關(guān)系,但是要在maven里實(shí)現(xiàn)一個(gè)簡(jiǎn)單的自定義功能,就很麻煩,要得寫(xiě)maven插件,而在gradle里,task是一等公民,可以輕易的添加自己的功能。
4. 靈活的依賴(lài)管理
ant沒(méi)有依賴(lài)管理的功能,都要自己手動(dòng)做,maven的依賴(lài)管理很死板,只能依賴(lài)于標(biāo)準(zhǔn)的maven artifact,不能依賴(lài)本地的某個(gè)jar文件或者其它的源碼。而gradle則可以混合地同時(shí)支持這些依賴(lài)方法,這樣可以讓舊項(xiàng)目的遷移容易得多。
5. 默認(rèn)就具有豐富的功能
只要安裝好gradle,默認(rèn)就支持java項(xiàng)目,war項(xiàng)目,ear項(xiàng)目,做單元測(cè)試,生成jar包,上傳jar包到maven服務(wù)器,等等功能。一般的項(xiàng)目都已經(jīng)夠用了。
三、簡(jiǎn)單舉例
安裝完gradle之后,在一個(gè)目錄里時(shí)建一個(gè)叫build.gradle的文件,一個(gè)工程就配好了。要支持生成jar包的jar工程,只要在build.gradle里面添加一行:
現(xiàn)在在這個(gè)目錄的命令行里運(yùn)行gradle jar
就可以自動(dòng)完成把/src/main/java下的java文件編譯,自動(dòng)單元測(cè)試/src/test/java下的類(lèi),自動(dòng)生成jar的功能了,太方便了。
讓它依賴(lài)于spring,也很簡(jiǎn)單:
1 2 3 4 | apply plugin: 'java'
dependencies {
compile 'org.springframework:spring-context:3.0.4.RELEASE'
}
|
gradle便會(huì)自動(dòng)地到maven服務(wù)器下載spring-context-3.0.4.RELEASE.jar,以及它所依賴(lài)的jar包。
還可以直接依賴(lài)本地jar包,如:
1 2 3 4 | apply plugin: 'java'
dependencies {
compile fileTree(dir: 'libs' , include: '*.jar' )
}
|
這樣就可以直接依賴(lài)/libs/目錄下所有的jar文件了。
再比如自定義一個(gè)task:
1 2 3 4 5 6 | apply plugin: 'java'
task myTask << {
if (System.properties[ 'love' ]) {
println "I love you! Gradle!"
}
}
|
在命令行執(zhí)行gradle myTask
就會(huì)運(yùn)行這個(gè)myTask任務(wù)了。
更多功能,要得看http://www.gradle.org 上的官方手冊(cè)。