概述
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插件提供了多个任务,我们将使用一个简单的Spring Boot应用来演示如何配置这些任务。为了演示目的,我们的Spring Boot应用不会添加任何安全或数据特性。现在,让我们详细了解一下如何定义和配置这些任务。
1. 配置bootJar
Gradle任务
在Spring Boot 3 Gradle插件中,与之前版本相比,Gradle任务得到了改进。常见的任务包括bootJar
、bootWar
、bootRun
和bootBuildImage
。现在,我们深入探讨bootJar
任务及其配置方法。
要在build.gradle
文件中配置bootJar
任务,我们需要添加一个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
。
2. 层叠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文件中,我们有独立的应用程序和框架层。因此,我们可以跨多个应用共享框架层,从而减少代码重复和资源消耗。
3. 配置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
服务在操作系统上正在运行。无论是在Windows、Linux还是macOS,Docker都提供了支持。运行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
来验证输出。
4. 结论
在这篇文章中,我们介绍了Spring Boot 3 Gradle插件的一些任务。这些任务相较于以往版本有许多改进。如往常一样,文章的代码可以在GitHub上找到。