1. 引言
Spring Boot Gradle 插件為 Gradle 提供 Spring Boot 支持。它允許我們打包可執行的 JAR 或 WAR 存檔,運行 Spring Boot 應用程序,並使用 spring-boot-dependencies 提供的依賴管理功能。Spring Boot 3 Gradle 插件需要 Gradle 7.x (7.5 或更高版本) 或 8.x,並且可以與 Gradle 的配置緩存一起使用。
在本教程中,我們將學習 Spring Boot 3 Gradle 插件的任務配置。Spring Boot 3 Gradle 插件中提供了多個 Gradle 任務。我們將使用一個簡單的 Spring Boot 應用來演示配置一些任務。為了演示目的,我們不會為我們的 Spring Boot 應用添加任何安全或數據功能。不廢話,讓我們現在更詳細地定義和配置任務。
2. 配置 bootJar Gradle 任務
在 Spring Boot 3 Gradle 插件中,Gradle 任務相比之前的版本得到了改進。一些常見的 Gradle 任務包括 bootJar、bootWar、bootRun 和 bootBuildImage。 讓我們深入瞭解 bootJar,並查看如何配置 bootJar 任務。
要配置 bootJar 任務,我們需要在我們的 build.gradle 文件中添加 bootJar 配置塊:
tasks.named("bootJar") {
launchScript{
enabled = true
}
enabled = true
archiveFileName = "bael-6094.${archiveExtension.get()}"
}
此配置塊設置了多個選項,用於 bootJar 任務。
launchScript 屬性會生成一個打包在結果 JAR 文件中的啓動腳本。這允許像任何其他命令一樣運行 JAR 文件。例如,我們無需顯式使用 java -jar <jarname>,就可以使用 jarname 或 ./jarname 運行 JAR 文件。要禁用 bootjar 任務,我們將 enabled 屬性設置為 false。 默認情況下,它設置為 true。
我們可以使用 archiveFileName 屬性 定義輸出 JAR 文件名。 現在,我們已準備好運行 bootJar 任務:
gradlew bootJar此操作會生成一個可執行的 JAR 文件,位於 build/libs 文件夾中。 JAR 的名稱,在本例中,將是 bael-6094.jar。
3. 分層 JAR 生成
Spring Boot Gradle 插件提供對構建分層 JAR 的支持。這有助於減少內存使用並促進關注點分離。
讓我們配置 bootJar 任務以使用分層架構。我們將 JAR 分成兩個層級:一個 application 層和一個 springBoot 層:
bootJar {
layered {
enabled = true
application {
layer = 'application'
dependencies {
// Add any dependencies that should be included in the application layer
}
}
springBoot {
layer = 'spring-boot'
}
}
}
在此示例中,啓用了分層功能,並定義了兩個層級:應用程序層和Spring Boot層。 應用程序層包含應用程序代碼以及任何指定的依賴項,而Spring Boot層包含Spring Boot框架及其依賴項。
接下來,我們使用bootJar任務構建我們的Spring Boot應用程序:
./gradlew bootJar這將創建一個分層 JAR 文件,位於 build/libs 目錄下,文件名為 {projectName}-{projectVersion}-layers.jar。
通過在分層架構中分離應用程序代碼和 Spring Boot 框架代碼,我們能夠獲得更快的啓動時間和更低的內存使用率。 此外,與我們在分層 JAR 文件中所做的那樣,我們擁有應用程序層和框架層。 因此,我們可以在多個應用程序之間共享框架層,從而減少代碼重複和資源消耗。
4. 配置 bootBuildImage任務
現在,我們將使用 bootBuildImage任務來構建我們的 Docker 鏡像。新的插件使用 Cloud Native Buildpacks (CNB) 創建 OCI 鏡像。
bootBuildImage任務需要訪問 docker守護進程。它將默認通過本地連接與 Docker 守護進程通信。這與 Docker Engine 在所有受支持平台上均有效,無需任何特定配置。我們可以使用環境變量(如 DOCKER_HOST、DOCKER_TLS_VERIFY、DOCKER_CERT_PATH 等)更改默認設置。此外,我們還可以使用插件配置不同的屬性。
讓我們在我們的 build.gradle中添加一個典型的 bootBuildImage任務,並進行自定義配置:
tasks.named("bootBuildImage") {
imageName = 'bael-6094:latest'
}接下來,讓我們運行 bootBuildImage 命令:
gradlew.bat bootBuildImage讓我們確保我們的 Docker 服務在我們的操作系統上正常運行。Docker 可用於所有主要操作系統,包括 Windows、Linux 和 macOS。由於運行 bootBuildImage 任務,我們會在 Docker 環境中獲得一個鏡像。讓我們列出本地環境中的可用 Docker 鏡像,以驗證我們新構建的鏡像:
docker images現在,我們準備好運行我們的容器:
docker run -p 8080:8080 bael-6094:latest-p 8080:8080 將我們的主機端口 8080 映射到容器端口 8080。默認情況下,Spring Boot 在容器內部以端口 8080 運行我們的應用程序,並且容器將其對外映射暴露。bootBuildImage 任務中提供了多種其他配置選項,我們可以使用它們來實現不同的功能。
現在,讓我們在瀏覽器中訪問 http://localhost:8080/hello 以驗證輸出。
5. 結論
在本文中,我們介紹了 Spring Boot 3 Gradle 插件任務。這些任務在許多方面比之前的版本都有了改進。