在 Spring Boot 3 中配置 Gradle Task

1、简介

Spring Boot Gradle Plugin 在 Gradle 中提供 Spring Boot 支持。它允许我们打包可执行的 JAR 或 war 文件,运行 Spring Boot 应用程序,并使用 spring-boot-dependencies 提供的依赖管理。Spring Boot 3 Gradle Plugin 需要 Gradle 7.x (7.5 或更高版本)或 8.x,并可与 Gradle 的配置缓存一起使用。

在这个教程中,我们将学习关于 Spring Boot 3 Gradle Plugin Task 配置的内容。Spring Boot 3 Gradle Plugin 提供了几个 Gradle task 可用。我们将使用一个简单的 Spring Boot 应用来演示如何配置一些 task。出于演示的目的,我们不会添加任何 security 配置或数据到我们的 Spring Boot 应用中。话不多说,现在让我们深入详细定义和配置这些 task。

2、配置 bootJar Gradle Task

在 Spring Boot 3 Gradle Plugin中,Gradle task 比以前的版本有所改进。一些常见的 Gradle task 包括 bootJarbootWarbootRunbootBuildImage。让我们深入了解 bootJar,看看如何配置 bootJar task。

要配置 bootJar task,我们必须在 build.gradle 文件中添加一个 bootJar 配置块:

tasks.named("bootJar") {
    launchScript{
        enabled = true
    }
    enabled = true
    archiveFileName = "bael-6094.${archiveExtension.get()}"
}

该配置块为 bootJar task 设置了几个选项。

属性 launchScript 会生成一个打包在生成的 JAR 中的启动脚本。这样就可以像运行其他命令一样运行 JAR。例如,无需明确使用 java -jar <jarname>,我们就能使用 jarname./jarname 运行 JAR。要禁用 bootjar task,我们要将 enabled 属性设为 false。默认设置为 true

我们可以使用 archiveFileName 属性定义输出 JAR 名称。现在,我们可以运行 bootJar task 了:

gradlew bootJar

这会在 build/libs 文件夹中生成一个完全可执行的 JAR。在我们的例子中,JAR 的名称是 bael-6094.jar

3、生成分层 JAR

Spring Boot Gradle Plugin 支持构建分层 JAR。这有助于减少内存使用并促进关注点分离。

让我们将 bootJar task 配置为使用分层架构。我们将 JAR 分成两层,一层是 application,另一层是 springBoot:

bootJar {
    layered {
        enabled = true
        application {
            layer = 'application'
            dependencies {
                // 添加应用层中应包含的任何依赖
            }
        }
        springBoot {
            layer = 'spring-boot'
        }
    }
}

在本示例中,启用了分层功能,并定义了两个层:application 层和 spring-boot 层。application 层包含应用程序代码和任何指定的依赖项,而 spring-boot 层包含 Spring Boot 框架及其依赖项。

接下来,让我们使用 bootJartask 构建 Spring Boot 应用程序:

./gradlew bootJar

这将在 build/libs 目录中创建一个分层 JAR 文件,文件名为 {projectName}-{projectVersion}-layers.jar

由于我们在分层架构中将应用程序代码与 Spring Boot 框架代码分开,因此启动时间更快,内存使用量更低。此外,在我们的分层 JAR 文件中,应用层和框架层是分开的。因此,我们可以在多个应用程序中共享框架层。这就减少了代码的重复和资源的浪费。

4、配置 bootBuildImage Task

现在让我们使用 bootBuildImage task 来构建我们的 Docker 镜像。新 Plugin 使用云原生构建包(Cloud Native Buildpacks)来创建 OCI 镜像。

bootBuildImage task 需要访问一个 Docker 守护进程。默认情况下,它会通过本地连接与 Docker 守护进程通信。在所有支持的平台上,这都能与 Docker Engine 配合使用,无需任何特定配置。我们可以使用 DOCKER_HOSTDOCKER_TLS_VERIFYDOCKER_CERT_PATH 等环境变量更改默认值。此外,我们还可以选择使用 Plugin 配置不同的属性。

让我们在 build.gradle 中添加一个带有自定义配置的典型 bootBuildImage task:

tasks.named("bootBuildImage") {
    imageName = 'bael-6094:latest'
}

接下来,运行 bootBuildImage 命令:

gradlew.bat bootBuildImage

让我们确保我们的 docker 服务已在操作系统上启动并运行。Docker 适用于所有主流操作系统,无论是 Windows、Linux 还是 macOS。运行 bootBuildImage task 后,我们就能在 Docker 环境中获得一个镜像。可以通过如下命令列出本地环境中可用的 Docker 镜像,以验证新构建的镜像:

docker images

现在,我们可以运行容器了:

docker run -p 8080:8080 bael-6094:latest

-p 8080:8080 将主机端口 8080 映射到容器端口 8080。默认情况下,Spring Boot 会在容器内的 8080 端口上运行我们的应用程序,容器会将其暴露给外部映射。bootBuildImage task 中还有其他几个配置选项,我们可以用它们来实现不同的功能。

接下来就可以在浏览器中访问 http://localhost:8080/hello,以验证输出结果。

5、总结

在本文中,我们介绍了一些 Spring Boot 3 Gradle plugin Task。与之前的版本相比,这些 task 有了许多改进。


原文:https://www.baeldung.com/spring-boot-3-gradle-configure-tasks