本人工作之初沒有使用自動化構建,後來敏捷了,開始使用 Ant - 完全面向過程的定義步驟,不進行依賴管理。再發展到 Maven,面向對象的方式管理工程,有了依賴的管理,JAR 包統一從中央倉庫獲得,保存在本地庫。同時產生了 Ivy + Ant,讓 Ant 也能管理依賴,不過 JAR 包依賴倉庫也是用 Maven 的。
前面都是用 XML 來配置的,雖說 XML 的標籤描述性也很強,但閱讀性還是有些牽強,並且 Maven 和 Ant+Ivy 都需要 IDE 的支持,比如在 Eclipse 中有專門 Maven Dependencies 或 ivy.xml [*] 中列出項目的依賴包,這裏常會出現些問題。
而我今天想嘗試使用的是基於 Groovy 的 Gradle,只要一個 build.gradle 文件,實質是一個 groovy 文件,由於可以 DSL,所以 Gradle 比 XML 更寫意,更主要的是 Gradle 項目不需要 IDE 的特別支持,見後面的圖。
先要安裝 Gradle,在我的 Mac 系統下我是用 brew install gradle
安裝的,不同平臺下可能用 yum, apt-get,安裝後執行 gradle
命令驗證。
接着按以下步驟:
1. 創建項目目錄 testgradle,並進入到新創建的目錄
mkdir testgradle
cd testgradle
2. 創建 build.gradle
文件,內容:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
apply plugin:
'java'
apply plugin:
'eclipse'
//apply plugin: 'idea'
repositories {
mavenCentral()
}
dependencies {
compile(
'ch.qos.logback:logback-classic:1.1.2'
,
'com.google.guava:guava:16.0'
)
testCompile(
'junit:junit:4.11'
)
}
|
這是一個 Groovy 腳本,如果要創建一個 IntelliJ IDEA 項目,上面就用 apply plugin: 'idea'
,指定 Gradle 使用 Maven 的中央庫。然後是依賴庫,編譯期,測試期的,指定特定版本包的格式也比 Maven 要簡潔。
像 Maven 一樣,Gradle 也可配置 providedCompile 和 providedRuntime 類型的依賴,即僅在編譯時或運行時用到的依賴。
3. 創建源文件目錄,和 Maven 的目錄佈局一致
1
2
|
mkdir
-p src
/main/
{java,resources}
mkdir
-p src
/test/
{java,resources}
|
也可以在 build.gradle 用 sourceSets 定義一個 Task 來準備上面的目錄
4. 生成 Eclipse 項目,執行命令:
gradle eclipse
Gradle 命令比較節約屏幕,默認是當前行不停的擦除再顯示信息的
[email protected] ~/D/testgradle> gradle eclipse
:eclipseClasspath
:eclipseJdt
:eclipseProject
:eclipseBUILD SUCCESSFUL
Total time: 4.269 secs
這樣在當前目錄下使產生了 Eclipe 項目要求的東西
.classpath .gradle .project .settings
如果執行 gradle 時帶上 --info 或 --debug 參數將會滾屏顯示詳細構建過程的信息
現在把 testgradle 項目導入到 Eclipse 就是下面的情形,Gradle 象 Maven 一樣能處理依賴的依賴
從上圖看到下載的依賴包在 ~/.gradle/caches 目錄中,在 Eclipse 中象普通 Java 項目那樣第三方包列在 Referenced Libraries
下,這樣不需要第三方 Eclipse 插件便能運行。
5. 構建
因爲不依賴於 IDE 的支持,所以很容易在 Eclipse/Idea 中進行調試,運行。可以執行 Gradle 的下面 task 來構建,或跑測試
gradle build
gradle javadoc
gradle test
以下內容僅作參考:
用 gradle tasks 可列出所有可用的 Task
Eclipse 需要特定的插件來支持 Maven 和 Ivy 產生的依賴
再繼續看下 Gradle 究竟爲何物:
從上面我們發現 Gradle 也是在 Any+Ivy 基礎上發展而來的。再列下 gradle 的 lib 目錄下有什麼 JAR 文件,就知道它還用到了哪些包。