在 Spring Boot 3 中配置 Gradle 任務
一、簡介
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
這會在build/libs文件夾中生成一個完全可執行的 JAR。在我們的例子中,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'
 }
 }
 }
本例中啟用了分層特性,定義了兩層: application層和spring-boot層。 application層包含應用程序代碼和任何指定的依賴項,而spring-boot層包含 Spring Boot 框架及其依賴項。
接下來,讓我們使用bootJar任務構建我們的 Spring Boot 應用程序:
./gradlew bootJar
這將在名為{projectName}-{projectVersion}-layers.jar的build/libs目錄中創建一個分層 JAR 文件。
當我們在分層架構中將應用程序代碼與 Spring Boot 框架代碼分開時,我們可以獲得更快的啟動時間和更低的內存使用量。此外,在我們的分層 JAR 文件中,我們為應用程序和框架設置了單獨的層。因此,我們可以跨多個應用共享框架層。這導致代碼重複和資源的減少。
4.配置bootBuildImage任務
現在讓我們使用任務bootBuildImage來構建我們的 Docker 鏡像。新插件使用 Cloud Native Buildpacks (CNB) 創建 OCI 映像。
任務bootBuildImage需要訪問docker守護進程。默認情況下,它將通過本地連接與 Docker 守護進程通信。這適用於所有支持平台上的Docker 引擎,無需任何特定配置。我們可以使用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 插件任務。這些任務比以前的版本有很多改進。與往常一樣,文章代碼 在 GitHub 上可用。