Java Gradle 教學

Gradle 是一個基於 JVM 的現代化建置工具,它的目標是結合 Maven 的依賴管理靈活性與 Ant 的強大功能。Google 選擇 Gradle 作為 Android Studio 的官方建置系統,使得 Gradle 在 Java 生態系中迅速普及。

與 Maven 使用 XML 不同,Gradle 使用基於 Groovy 或 Kotlin 的 DSL (Domain Specific Language) 來撰寫腳本,這讓建置邏輯更具程式化能力且更易讀。

為什麼選擇 Gradle?

  • 靈活性高:因為是腳本語言,可以輕鬆撰寫複雜的建置邏輯
  • 效能更好:由於增量建置 (Incremental Build) 和建置快取 (Build Cache) 機制,Gradle 的建置速度通常比 Maven 快很多
  • 簡潔的設定:相比 XML,Gradle 腳本通常更短、更乾淨

安裝 Gradle

與 Maven 類似,Gradle 也推薦使用 Wrapper,因此你未必需要全域安裝 Gradle。但若要安裝:

  1. 先安裝 JDK (Gradle 執行需要 JVM)
  2. 下載:前往 Gradle 官網
  3. 使用套件管理工具 (推薦):
    • macOS: brew install gradle
    • Windows: choco install gradle

驗證安裝:

gradle -v

從零建立 Gradle 專案

使用 gradle init 指令可以快速初始化專案。

  1. 建立資料夾:創建並進入一個新資料夾 (例如 my-app)
  2. 初始化
gradle init
  1. 選擇專案類型:選擇 2: application (應用程式)。
  2. 選擇語言:選擇 3: Java
  3. 選擇 DSL:選擇 1: Groovy2: Kotlin (建議初學者選 Groovy)。
  4. 選擇測試框架:選擇 4: JUnit Jupiter
  5. 設定專案名稱與 Package:使用預設值即可。

完成後,Gradle 會自動產生標準的專案結構與 Wrapper 檔案。

Gradle 專案結構

Gradle 預設支援 Maven 的目錄結構:

my-app/
├── build.gradle         (建置腳本)
├── settings.gradle      (專案設定,如模組名稱)
└── src/
    ├── main/
    │   ├── java/
    │   └── resources/
    └── test/
        ├── java/
        └── resources/

build.gradle 核心概念 (Groovy DSL)

這是一個標準的 Java 應用程式 build.gradle 範例:

/* 1. 引用插件 */
plugins {
    id 'java'
    id 'application'
}

/* 2. 專案屬性 */
group = 'com.example'
version = '1.0.0-SNAPSHOT'

repositories {
    mavenCentral()  // 指定使用 Maven Central 倉庫
}

/* 3. 依賴管理 */
dependencies {
    // 測試依賴
    testImplementation platform('org.junit:junit-bom:5.10.0')
    testImplementation 'org.junit.jupiter:junit-jupiter'
    
    // 一般依賴 (例如 Gson)
    implementation 'com.google.code.gson:gson:2.10.1'
}

/* 4. 應用程式設定 */
application {
    mainClass = 'com.example.App'
}

/* 5. 任務設定 */
test {
    useJUnitPlatform()
}

常見配置項 (Configuration)

Gradle 依賴管理的配置項與 Maven Scope 對應關係:

GradleMaven Scope說明
implementationcompile專案內部依賴,不會暴露給依賴此專案的其他模組
apicompile會暴露給其他模組 (需引用 java-library plugin)
compileOnlyprovided編譯時需要,執行時不需要
runtimeOnlyruntime執行時需要,編譯時不需要
testImplementationtest僅測試時需要

Gradle Wrapper (gradlew)

強烈建議使用 Wrapper。這會產生 gradlew (Unix) 和 gradlew.bat (Windows) 腳本。

初始化 Wrapper:

gradle wrapper

使用 Wrapper 執行指令:

./gradlew build

常用 Gradle 任務 (Tasks)

Gradle 的工作單元稱為 Task

  • ./gradlew build:完整的建置專案(包含編譯、測試、打包)

  • ./gradlew clean:刪除 build/ 目錄

  • ./gradlew run:執行應用程式Main Class (需 application plugin)

  • ./gradlew test:執行測試

  • ./gradlew tasks:列出所有可用的任務

  • ./gradlew tasks:列出所有可用的任務

執行應用程式

如果你的專案使用了 application plugin (執行 gradle init 選擇 application 類型時會自動加入),你可以直接使用 run 任務來執行程式。

./gradlew run

這會自動編譯並執行設定在 Main-Class 的程式。

Maven vs Gradle 比較

特性MavenGradle
設定檔格式XML (pom.xml)Groovy / Kotlin DSL (build.gradle)
建置速度較慢顯著較快 (增量建置)
學習曲線較低,結構固定較高,需學習 DSL
靈活性低,依靠 Plugin高,可寫程式邏輯
IDE 支援極佳極佳 (IntelliJ 為主)

總結

  • Gradle 是功能強大且高效的下一代建置工具
  • 語法簡潔,基於 Groovy 或 Kotlin DSL
  • 推薦在大型專案或 Android 開發中使用
  • 記得使用 Gradle Wrapper 確保環境一致