2011年10月28日

敏捷 Java 開發之 Gradle 專案自動化工具介紹

Gradle 是以 Groovy 語言為基礎開發的專案自動化(project automation)工具,它可以用簡單的 Groovy DSL 語法,將 Java 軟體開發過程中需要的編譯、建置、測試、打包及佈署工作,變成簡單、方便重複使用的 build.gradle 檔案。

Gradle 的功能類似 Ant (使用 build.xml 設定檔),但使用更簡單方便,它可以直接撰寫 Groovy 程式碼,因此彈性更大、功能更強也便於擴充。Gradle 使用 Apache Ivy 管理相依套件,並可以使用 Maven repository 作為套件來源,這將大幅減少 Java 專案惱人的相依套件問題。

舉例來說,當 a-1.0.jar 需要依賴 b-1.1.jar 及 c-1.1.jar 才能運作,使用到 a 的專案,就必須另外下載 b / c 的 jar 檔到 CLASSPATH 下,否則 a 套件的類別可能跑到一半就爆炸了。

傳統的 Java EE 開發者會建立一個 lib 資料夾,並把所有依賴的套件都往裡面丟。這造成很多問題,套件根本難以維護、升級,需要瑣碎的人工作業(工人智慧)才能管理。如果專案一多,發行的版本一多,真的需要多聘請一位「套件關係工程師」才能解決大家的困擾。

雖然 Apache Ant 可以簡化專案建置的流程,但是沒辦法處理套件相依問題。所以有了 Apache Ivy ,以及出現可以取代 Ant 、更有智慧的 Maven 工具。

Maven 提供許多 repository ,也就是大家常用、開源的套件,都有社群維護的設定檔,放在一些開放的主機提供下載,類似 Debian/Ubuntu 的 apt 或 Fedora / CentOS 的 yum 套件管理。在 mvnrepository 網站,可以搜尋你需要的套件是否有 repository 可用。

實際將 Ant / Ivy / Maven 運用在專案的開發者,應該都體驗過 Java 的苦難(設定複雜、瑣碎、麻煩),因此,如果你想要繼續用 Java 開發軟體,而且希望用更敏捷的方式,當個快樂的程式設計師,就需要學會使用 Gradle 工具。

Gradle 基於 Groovy 簡潔、易學易寫的特性,設計出專案自動化所需要的 DSL(領域描述語言),並且將 Ant / Ivy / Maven 的好處都整合起來。

Gradle - a build automation DSL

Gradle 的語法就是 Groovy,因此 build.gradle 可以簡單到只有一行印出訊息:

println 'hello gradle'

過去使用 Ant 進行刪除檔案的動作,必須記得 XML 指令長什麼樣子,但使用 Gradle 就相當直覺:

delete 'foo', 'bar', 'bazz'

麻煩的套件相依管理對 Gradle 來說非常簡單,例如,你的專案需要用到 MySQL (ConnectorJ),只需要加入一行程式碼設定 group、name、version。

dependencies {
    runtime group: 'mysql', name: 'mysql-connector-java', version: '5.1.6'
}

安裝 Gradle 1.0 milestone X (gradle-tomcat-plugin 需要使用 1.0 以上版本)

MacPort
sudo port install gradle-devel

Ubuntu (11.10)
sudo apt-get install gradle

其他作業系統必須自行下載安裝: http://www.gradle.org/downloads

接下來,可以閱讀 Gradle 官方提供的免費 Cookbook:

http://wiki.gradle.org/display/GRADLE/Cookbook

3 則留言:

  1. 您好,您一系列的 Gradle 介紹寫得很好,讓我想試試看 Gradle。我有使用過 Ant 的經驗,不過卻沒有使用過 Maven。想請教您一個問題:使用 Gradle 來建置專案,就我的理解,Gradle 可以至 maven 的 repository 下載專安需要的 dependencies 並存放在 cache 資料夾底下以作為之後建置專案之用。若是我使用 eclipse 來開發專案,想要有 auto-build 跟 auto-completion 的功能,那我是不是還是得另外下載專案所需要的 jar 並放置在 lib 資料夾底下呢?還是我得設定專案的 classpath 至特殊的位置?

    回覆刪除
  2. 您好,不必另外下載,我將相關使用方式整理在: http://blog.lyhdev.com/2011/12/java-gradle-eclipse.html

    歡迎多交流討論!

    回覆刪除
  3. 看了這麼多篇您的介紹,唯獨漏了這一篇,感激不盡!

    回覆刪除

lyhcode by lyhcode
歡迎轉載,請務必註明出處!