在Spring Boot 3中配置Gradle任务

2023/11/03

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任务,我们必须将bootJar配置块添加到build.gradle文件中

tasks.named("bootJar") {
    launchScript{
        enabled = true
    }
    enabled = true
    archiveFileName = "tuyucheng.${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名称为tuyucheng.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

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

当我们在分层架构中将应用程序代码与Spring Boot框架代码分离时,我们可以获得更快的启动时间和更低的内存使用量。此外,正如在我们的分层JAR文件中一样,我们为应用程序和框架提供了单独的层。因此,我们可以跨多个应用程序共享框架层,这样可以减少代码重复和资源。

4. 配置bootBuildImage任务

现在让我们使用任务bootBuildImage来构建我们的Docker镜像,新插件使用Cloud Native Buildpacks(CNB)创建OCI镜像

任务bootBuildImage需要访问Docker Daemon。默认情况下,它将通过本地连接与Docker守护进程进行通信。这适用于所有支持的平台上的Docker引擎,无需任何特定配置。我们可以使用DOCKER_HOST、DOCKER_TLS_VERIFY、DOCKER_CERT_PATH等环境变量更改默认值。此外,我们可以选择使用插件配置不同的属性。

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

tasks.named("bootBuildImage") {
    imageName = 'tuyucheng:latest'
}

接下来,让我们运行bootBuildImage命令:

gradlew.bat bootBuildImage

让我们确保我们的Docker服务在我们的操作系统上启动并运行,Docker适用于所有主要操作系统,无论是Windows、Linux还是macOS。运行bootBuildImage任务的结果是,我们在Docker环境中获得了一个镜像。让我们列出本地环境中可用的Docker镜像来验证我们新构建的镜像:

docker images

现在,准备运行我们的容器:

docker run -p 8080:8080 tuyucheng:latest

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

现在让我们在浏览器中导航到http://localhost:8080/hello来验证输出。

5. 总结

在本文中,我们介绍了一些Spring Boot 3 Gradle插件任务,这些任务比以前的版本有许多改进。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章