基於 Groovy 的自動化構建工具 Gradle 入門(轉)

 

本人工作之初沒有使用自動化構建,後來敏捷了,開始使用 Ant - 完全面向過程的定義步驟,不進行依賴管理。再發展到 Maven,面向對象的方式管理工程,有了依賴的管理,JAR 包統一從中央倉庫獲得,保存在本地庫。同時產生了 Ivy + Ant,讓 Ant 也能管理依賴,不過 JAR 包依賴倉庫也是用 Maven 的。

前面都是用 XML 來配置的,雖說 XML 的標籤描述性也很強,但閱讀性還是有些牽強,並且 Maven 和 Ant+Ivy 都需要 IDE 的支持,比如在 Eclipse 中有專門 Maven Dependenciesivy.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
:eclipse

BUILD SUCCESSFUL

Total time: 4.269 secs

這樣在當前目錄下使產生了 Eclipe 項目要求的東西

.classpath   .gradle      .project     .settings

如果執行 gradle 時帶上  --info 或 --debug 參數將會滾屏顯示詳細構建過程的信息

現在把 testgradle 項目導入到 Eclipse 就是下面的情形,Gradle 象 Maven 一樣能處理依賴的依賴

gradle-eclipse-libraries
從上圖看到下載的依賴包在 ~/.gradle/caches 目錄中,在 Eclipse 中象普通 Java 項目那樣第三方包列在 Referenced Libraries 下,這樣不需要第三方 Eclipse 插件便能運行。

5. 構建

因爲不依賴於 IDE 的支持,所以很容易在 Eclipse/Idea 中進行調試,運行。可以執行 Gradle 的下面 task 來構建,或跑測試

gradle build
gradle javadoc
gradle test


以下內容僅作參考:

用 gradle tasks 可列出所有可用的 Task

gradle_tasks
Eclipse 需要特定的插件來支持 Maven 和 Ivy 產生的依賴

maven-libraries ant+ivy-libraries

再繼續看下 Gradle 究竟爲何物:

gradle-version

從上面我們發現 Gradle 也是在 Any+Ivy 基礎上發展而來的。再列下 gradle 的 lib 目錄下有什麼 JAR 文件,就知道它還用到了哪些包。

Gradle 官方用戶指南