2013年11月20日

利用 IntelliJ IDEA Community Edition (Free) 輕鬆開發 Gradle / Java 專案

Gradle 是令開發者「再也回不去」的自動化建置工具;過去 Java 的開發者在使用 Ant + Ivy 及 Maven 所遇到的障礙,往往最後還是要依賴 IDE 的 Build 支援,因為傳統 Java 的 XML 設定實在讓人卻步。

Gradle 不僅是設定比 Maven 更容易,最重要的是它的設定本身是 Groovy Script,所以任何 Java 程式能做到事情,在 Gradle 的 Task 中也都能輕鬆做到。開發 Gradle Task Plugin 的難度低,所以在開發過程的日常任務,都可以用更少的時間輕鬆達成自動化建置。

不過在導入 Gradle 工具後,許多 Java 開發者的第一個疑問是?是不是一定要搭配 Console command-line 使用,而必須放棄 IDE 的 Build 功能呢?

回想兩年前,Gradle 使用人口還不多,版本也遲遲未正式推出 1.0,那時候 IDE 對 Gradle 的支援只能用慘字形容。但現在的 Gradle 已經有大幅的進步,而各大 IDE 也持續改善「Gradle 專案」的支援。

目前各大 IDE 的支援狀況:

Eclipse

Spring 官方的開發工具 STS(Spring Tool Suite)是以 Eclipse 為基礎建置的 IDE,所以官方也開發一個 Gradle Integration 工具;如果不想使用 STS,也可以自行利用 Update site 單獨安裝 Plugin 功能。

因為 Eclipse 沒有內建「新增 Gradle 專案」的功能,需要利用 Gradle 內建 Eclipse Plugin 先產生 Java Project Settings,再用 Import Existing Project 的方式匯入。

NetBeans

目前的 NetBeans 可以直接在內建的 Plugins 清單搜尋並安裝 Gradle Support Plugin,就能直接開啟包含 build.gradle 設定檔的專案資料夾。

Gradle 並未提供 NetBeans Plugin,所以在 NetBeans IDE 中建置 Gradle 專案,實際上使用的是 IDEA Plugin。

IntelliJ IDEA

本篇主要介紹 IDEA 的原因,就是它對 Gradle 的支援度最佳,而且功能有持續更新及維護。IDEA 有商業授權版及免費社群版(Community Edition,簡稱 CE),許多 Java 開發者會覺得 Java EE 功能必須商業版才有提供,例如 Grails 等;但 IntelliJ 對開源社群相當友善,處理回應開發者問題及需求的速度也快,目前免費的 CE 就對 Gradle(包括 Android)內建完整功能。

Gradle 本身也內建 IDEA Plugin,它可以用來產生 IDEA 所需的建置設定。但由於 IDEA 對 Gradle 的完善支援,即使沒有先跑 Gradle 產生設定檔,也能在 IDEA 匯入 Gradle 專案時自動產生相關必要設定。

這篇文章將以最新的 IntelliJ IDEA 13(目前還是測試版)為例。

建立 Gradle 專案

在 IDEA 新建 Project,直接選擇 Gradle 專案類型。
Gradle 專案的設定,需要指定 Gradle 來源,有三種模式:(1) default 使用 IDE 內建的 Gradle Wrapper、(2) 使用專案自訂的 Gradle Wrapper、(3) 使用安裝在本地端的 Gradle 版本。
Gradle 內建 Wrapper Plugin,Wrapper 的功能是一個非常棒的設計,它會在專案資料夾產生 gradlew 及 gradlew.bat 兩個執行檔,與一個包含必要 JAR 檔案的 gradle 資料夾。gradlew 是 Linux 及 Mac OS X 適用的 BASH Scirpt,而 gradlew.bat 則是 Windows 的批次檔,所以在沒有安裝 Gradle 的電腦,只要裝有 JDK,仍可以執行 ./gradlew build 來建置專案。

Wrapper 對發佈到 CI(持續整合系統如 Travis 或 Jenkins)來說是非常方便的設計,因為在 CI 上不必先安裝 Gradle 環境,而且每個專案使用的 Gradle 版本可能也有差異,Wrapper 可以指定所用的 Gradle 版本(但必須 > 1.7,因為在這之後才有 Wrapper)。

也就是說,即使電腦沒有先裝 Gradle,在 IDEA 仍可以建置 Gradle 專案,實際上就是由 Wrapper 來處理。

以下是 Gradle 專案新增完成的畫面。


使用 JetGradle 工具

IDEA 12 開始提供內建的 JetGradle 工具,到 IDEA 13 已直接稱為 Gradle tasks,這個工具可以從 View / Tool Windows / Gradle 打開。

JetGradle 的主要功能包含:(1) 列出專案可用的 Gradle Task 指令清單、(2) 重新讀取 Gradle 設定。當 build.gradle 的內容修改,例如增加 dependency 後,就可以利用重新整理按鈕,將依賴的 JAR Library 載入,就能在 Java 程式碼中 import 所需的新類別。


新增 Java 類別

在新建 Gradle 專案的 build.gradle 設定檔,可以看到它已經包含「apply plugin: 'java'」設定,也就是專案已經支援基本的 Java 程式編譯及建置。

預設的 Java 原始碼需要放在「src/main/java」,我們需要先在專案右鍵選單的 New / Directory 手動建立資料夾。


資料夾「src/main/java」新增後,可以看到「java」目錄是不同顏色。


在「java」目錄右鍵選單,選擇 New / Java Class 新增 Java 類別。


寫一個 Hello World 程式碼(com.company.Hello)。


執行程式(Run Task)

Gradle 的 Application Plugin 提供執行 Java 程式的功能,先在 build.gradle 增加以下兩行設定:

apply plugin: 'application'

mainClassName = 'com.company.Hello'


修改後再到 JetGradle 重新載入設定(使用工具視窗左上方的 Reload 按鈕)。


點兩下 HelloGradle 在 All tasks 的「run」任務,開始執行 Run Task(由 Application Plugin 提供;在 build.gradle 設定 mainClassName 指定要啟動的 Startup Class)。

在 IDEA 顯示程式執行結果。


這個動作也等於在 Console 自行輸入「gradle run」或「./gradlew run」的 command-line 指令。


Conclusion

利用 Gradle 豐富的 Plugin,可以建立各種自動化的專案建置流程,團隊開發成員也能各自選擇喜好的開發工具,不再受限 IDE 設定。

由於 build.gradle 明確定義專案參數,例如 dependency library 的版本及來源,如此可以避免過去 Java IDE 經常出現的 trouble,特別是在協同開發時經常發生從 VCS 取得的專案,總是缺少某些設定或無法順利建置。

IntelliJ IDEA Community Edition 無疑是目前與 Gradle 搭配最佳的開發工具,不僅免費且功能十分友善。搭配 Gradle 建置設定,讓 IDEA 幾乎可以勝任各類型 Java 專案的開發,從 Spring MVC、GWT 到 Android 等,不再依賴 IDE 提供特別的專案類型設定。

沒有留言:

張貼留言

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