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