透過執行 Gradle 任務並查看其輸出,學習 Gradle 任務的基礎知識。

在本節中,您將

  • 查看可用的任務

  • 執行任務並檢查結果

  • 了解任務

  • 探索任務依賴關係

步驟 0. 開始之前

  1. 您已在第一部分中初始化您的 Java 應用程式。

步驟 1. 檢視可用的任務

任務是 Gradle 可以作為建置一部分完成的基本工作單元。

tutorial 目錄中,輸入以下命令以列出專案中所有可用的任務

$ ./gradlew tasks

該列表包含 application 外掛及其應用的外掛所貢獻的任務

Application tasks
-----------------
run - Runs this project as a JVM application

Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.

...

Documentation tasks
-------------------
javadoc - Generates Javadoc API documentation for the main source code.

...

Other tasks
-----------
compileJava - Compiles main Java source.

...

任務可能負責編譯、複製和移動檔案、建立 JAR 檔案、產生 Javadoc、將工件發布到儲存庫,或許多其他離散的工作單元。

您也可以透過執行 ./gradlew :app:tasks,僅列出 app 子專案中可用的任務。

您可以使用 --all 選項在任務列表中取得更多資訊:./gradlew tasks --all

在本教學的第一部分中,我們使用 ./gradlew build 命令執行了 build 任務。

步驟 2. 了解任務

我們已經列出了專案初始化時可用的任務,但如果我們想要建立自己的任務呢?

Gradle 提供了許多內建任務,開發人員可以使用這些任務來增強建置腳本。

此範例任務使用 Copy 內建任務,將 *.war 檔案從 source 目錄複製到 target 目錄。

tasks.register<Copy>("copyTask") {
    from("source")
    into("target")
    include("*.war")
}
tasks.register("copyTask", Copy) {
    from("source")
    into("target")
    include("*.war")
}

如果將此任務新增至 app 子專案目錄中的 build.gradle(.kts) 檔案,則可以使用命令 ./gradlew :app:copyTask 執行。

常用的內建任務包括

  • Copy - Copy 用於複製檔案。

  • Delete - Delete 用於刪除檔案和目錄。

  • Exec - Exec 用於執行任意的作業系統命令。

  • Zip - Zip 用於捆綁檔案。

Kotlin 和 Groovy DSL 中記錄了更多。

步驟 3. 了解任務之間的依賴關係

很多時候,一個任務需要另一個任務先執行。如果任務 B 使用任務 A 的輸出,則任務 A 必須在任務 B 開始之前完成。

  • 任務可以顯式宣告其依賴關係。

  • 任務可以隱式依賴其他任務。

以下是一個顯式任務依賴關係的範例

tasks.register("hello") {
    doLast {
        println("Hello!")
    }
}

tasks.register("greet") {
    doLast {
        println("How are you?")
    }
    dependsOn("hello")
}
tasks.register("hello") {
    doLast {
        println('Hello!')
    }
}

tasks.register("greet") {
    doLast {
        println('How are you?')
    }
    dependsOn("hello")
}

在這種情況下,hellogreet 之前印出。輸出為 Hello! How are you?

任務執行順序由 Gradle 自動決定,並考慮到顯式和隱式任務依賴關係。如果任務之間沒有依賴關係,Gradle 允許使用者請求特定的執行順序。

步驟 4. 在 IDE 中檢視任務

專案任務在 IntelliJ 中也可用。專案應依照教學的第一部分開啟。

在視窗的右側,開啟 Gradle 窗格

intellij idea tasks

步驟 5. 在 IDE 中執行任務

您可以透過在窗格中雙擊該任務,經由 IntelliJ 執行 Gradle 任務。

雙擊 tutorial > app > build > build

intellij idea build

建置完成後,請確認它在 IntelliJ 控制台中成功

BUILD SUCCESSFUL in 966ms
7 actionable tasks: 7 executed
3:18:24 AM: Execution finished 'build'.

步驟 6. 在終端機中執行任務

在您的終端機中執行以下命令

$ ./gradlew build
> Task :app:compileJava
> Task :app:processResources
> Task :app:classes
> Task :app:jar
> Task :app:startScripts
> Task :app:distTar
> Task :app:distZip
> Task :app:assemble
> Task :app:compileTestJava
> Task :app:processTestResources
> Task :app:testClasses
> Task :app:test
> Task :app:check
> Task :app:build

build 任務使用原始碼及其依賴關係來建置應用程式。如輸出所示,build 任務編譯、組裝、測試和檢查程式碼。

任務按照執行順序印出。jar 任務是 build 任務的依賴項。

jar 任務建立應用程式的可執行 JAR 檔案。讓我們單獨執行它

$ ./gradlew jar
> Task :app:compileJava
> Task :app:processResources
> Task :app:classes
> Task :app:jar

正如預期的,compileJava 任務是 jar 任務的依賴項,並首先執行。任務完成後,會在您的 tutorial/app/build/libs/ 資料夾中建立一個 app.jar 檔案。

調用 run 任務並檢查輸出

$ ./gradlew run
> Task :app:compileJava
> Task :app:processResources
> Task :app:classes

> Task :app:run
Hello World!

BUILD SUCCESSFUL in 325ms

run 任務執行 tutorial/app/src/main/java/com.gradle.tutorial/App.java 中的程式碼。App.java 中的 Java 程式碼只是在螢幕上印出 "Hello World"

public class App {
    public String getGreeting() {
        return "Hello World!";
    }
    public static void main(String[] args) {
        System.out.println(new App().getGreeting());
    }
}

下一步: 依賴管理 >>