透過使用 Gradle init 建立 Java 應用程式來學習 Gradle 的基礎知識。

在本節中,您將

  • 初始化一個新的 Gradle 專案

  • 建置專案

  • 檢閱 Gradle 的專案結構

  • 在 IntelliJ IDEA 中開啟專案

  • 探索 Gradle 檔案和建置腳本

  • 了解 Gradle wrapper

步驟 0. 開始之前

  1. 請確保您已安裝 Gradle

  2. 安裝 IntelliJ IDEA。Community Edition 是 IntelliJ IDEA 的免費版本。

步驟 1. 初始化專案

若要測試 Gradle 安裝,請從命令列執行 Gradle

$ gradle

Welcome to Gradle 8.6.

Directory '/' does not contain a Gradle build.

To create a new build in this directory, run gradle init

如果尚未安裝 Gradle,請參閱安裝章節

建立一個名為 tutorial 的新目錄並 cd 進入

$ mkdir tutorial
$ cd tutorial

執行 gradle init 並使用以下參數來產生 Java 應用程式

$ gradle init --type java-application  --dsl kotlin
$ gradle init --type java-application  --dsl groovy

針對任何其他提示選取預設值。

在本教學中,所有範例均以 macOS 為基礎。

完成後,目錄應如下所示

.
├── .gradle                 (1)
│   └── ⋮
├── gradle                  (2)
│   ├── libs.versions.toml  (3)
│   └── wrapper
├── gradlew                 (4)
├── gradlew.bat             (5)
├── settings.gradle.kts     (6)
├── app                     (7)
│   ├── build.gradle.kts
│   └── src
└── ⋮                       (8)
1 由 Gradle 產生的專案特定快取目錄。
2 包含 Gradle Wrapper 的 JAR 檔案和組態。
3 版本目錄,其中定義了相依性的一組版本,集中在一個位置。
4 macOS 和 Linux 腳本,用於使用 Gradle Wrapper 執行建置。
5 Windows 腳本,用於使用 Gradle Wrapper 執行建置。
6 專案的設定檔,其中定義了子專案的清單。
7 Java 應用程式的原始碼和建置組態。
8 可能存在一些額外的 Git 檔案,例如 .gitignore
.
├── .gradle                 (1)
│   └── ⋮
├── gradle                  (2)
│   ├── libs.versions.toml  (3)
│   └── wrapper
├── gradlew                 (4)
├── gradlew.bat             (5)
├── settings.gradle         (6)
├── app                     (7)
│   ├── build.gradle
│   └── src
└── ⋮                       (8)
1 由 Gradle 產生的專案特定快取目錄。
2 包含 Gradle Wrapper 的 JAR 檔案和組態。
3 版本目錄,其中定義了相依性的一組版本,集中在一個位置。
4 macOS 和 Linux 腳本,用於使用 Gradle Wrapper 執行建置。
5 Windows 腳本,用於使用 Gradle Wrapper 執行建置。
6 專案的設定檔,其中定義了子專案的清單。
7 Java 應用程式的原始碼和建置組態。
8 可能存在一些額外的 Git 檔案,例如 .gitignore

步驟 2. 了解 Gradle Wrapper

Gradle Wrapper 是啟動 Gradle 建置的慣用方式。Wrapper 會下載(如果需要)然後調用建置中宣告的特定 Gradle 版本。

在您新建立的專案中,首先查看 Gradle Wrapper 使用的檔案。它包含用於 macOS 和 Linux 的 shell 腳本 以及用於 Windows 的批次腳本

這些腳本允許您執行 Gradle 建置,而無需在系統上安裝 Gradle。它還有助於確保不同的開發人員以及本地和 CI 機器之間,建置都使用相同版本的 Gradle。

從現在開始,您將永遠不會直接調用 Gradle;相反地,您將使用 Gradle wrapper

步驟 3. 呼叫 Gradle Wrapper

透過輸入以下命令來使用 wrapper

$ ./gradlew build

在 Windows 中,命令是

$ .\gradlew.bat build

當您第一次執行 wrapper 時,如果您的機器上尚未安裝 Gradle 二進制檔案,它會下載並快取這些檔案。

Gradle Wrapper 設計為提交到原始碼控制,以便任何人都可以建置專案,而無需先安裝和配置特定版本的 Gradle。

在此案例中,我們透過 wrapper 調用 Gradle 來建置我們的專案,因此我們可以看到 app 目錄現在包含一個新的 build 資料夾

$ cd app
$ ls -al
drwxr-xr-x  10 gradle-user  staff  320 May 24 18:07 build
-rw-r--r--   1 gradle-user  staff  862 May 24 17:45 build.gradle.kts
drwxr-xr-x   4 gradle-user  staff  128 May 24 17:45 src
drwxr-xr-x  10 gradle-user  staff  320 May 24 18:07 build
-rw-r--r--   1 gradle-user  staff  862 May 24 17:45 build.gradle
drwxr-xr-x   4 gradle-user  staff  128 May 24 17:45 src

建置程序產生的所有檔案都會進入 build 目錄,除非另有指定。

步驟 4. 了解 Gradle 的專案結構

讓我們看看標準的 Gradle 專案結構,並將其與我們的教學專案進行比較

project structure

一個建置包含

  1. 最上層的 settings.gradle(.kts) 檔案。

  2. 一個根專案

  3. 一個或多個子專案,每個子專案都有自己的 build.gradle(.kts) 檔案。

有些建置可能在根專案中包含 build.gradle(.kts) 檔案,但不建議這樣做。

libs.versions.toml 檔案是一個版本目錄,用於相依性管理,您將在本教學後續章節中學習到相關內容。

在本教學中

  1. 根專案稱為 tutorial,並在 settings.gradle 檔案中使用 rootProject.name = "tutorial" 定義。

  2. 子專案稱為 app,並在 settings.gradle 檔案中使用 include("app") 定義。

根專案可以在最上層目錄中,也可以有自己的目錄。

一個建置

  • 代表一組相關的軟體,您可以一起建置、測試和/或發布。

  • 可以選擇性地包含其他建置(即額外的軟體,例如函式庫、外掛、建置時工具等)。

一個專案

  • 代表您架構的單一部分 - 一個函式庫、一個應用程式、一個 Gradle 外掛等。

  • 可以選擇性地包含其他專案。

步驟 5. 在 IDE 中檢視 Gradle 檔案

透過在 tutorial 目錄中雙擊 settings.gradle.kts 檔案,在 IntelliJ IDEA 中開啟專案。對於 Groovy DSL 使用者,當您點擊 settings.gradle 檔案時,可能需要選取 IntelliJ IDEA 應用程式

intellij idea ide

在 IDE 中開啟 settings.gradle(.kts)build.gradle(.kts) 檔案

intellij idea open

步驟 6. 了解設定檔

一個專案由一個或多個子專案(有時稱為模組)組成。

Gradle 讀取 settings.gradle(.kts) 檔案,以找出哪些子專案組成了專案建置。

查看您專案中的檔案

settings.gradle.kts
plugins {
    // Apply the foojay-resolver plugin to allow automatic download of JDKs
    id("org.gradle.toolchains.foojay-resolver-convention") version "0.9.0"
}

rootProject.name = "tutorial"
include("app")
settings.gradle
plugins {
    // Apply the foojay-resolver plugin to allow automatic download of JDKs
    id 'org.gradle.toolchains.foojay-resolver-convention' version '0.9.0'
}

rootProject.name = 'tutorial'
include('app')

tutorial 根專案包含 app 子專案。include 呼叫的存在將 app 目錄轉變為子專案。

步驟 7. 了解建置腳本

每個子專案都包含自己的 build.gradle(.kts) 檔案。

build.gradle(.kts) 檔案是建置程序的核心組件,並定義建置專案所需的任務。

build.gradle(.kts) 檔案由 Gradle 讀取和執行。

更仔細地查看您的 app 子專案(在 app 目錄下)中的建置檔案

build.gradle.kts
plugins {
    // Apply the application plugin to add support for building a CLI application in Java.
    application
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    // Use JUnit Jupiter for testing.
    testImplementation(libs.junit.jupiter)

    testRuntimeOnly("org.junit.platform:junit-platform-launcher")

    // This dependency is used by the application.
    implementation(libs.guava)
}

// Apply a specific Java toolchain to ease working on different environments.
java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(11))
    }
}

application {
    // Define the main class for the application.
    mainClass.set("running.tutorial.kotlin.App")
}

tasks.named<Test>("test") {
    // Use JUnit Platform for unit tests.
    useJUnitPlatform()
}
build.gradle
plugins {
    // Apply the application plugin to add support for building a CLI application in Java.
    id 'application'
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    // Use JUnit Jupiter for testing.
    testImplementation libs.junit.jupiter

    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

    // This dependency is used by the application.
    implementation libs.guava
}

// Apply a specific Java toolchain to ease working on different environments.
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(11)
    }
}

application {
    // Define the main class for the application.
    mainClass = 'running.tutorial.groovy.App'
}

tasks.named('test') {
    // Use JUnit Platform for unit tests.
    useJUnitPlatform()
}

此建置腳本讓 Gradle 知道 app 子專案正在使用哪些相依性和外掛,以及在哪裡可以找到它們。我們將在後續章節中更詳細地查看此內容。

下一步: 執行任務 >>