Spring Boot打包必备:spring-boot-maven-plugin的7个隐藏用法(含版本兼容指南)

张开发
2026/4/19 17:49:35 15 分钟阅读

分享文章

Spring Boot打包必备:spring-boot-maven-plugin的7个隐藏用法(含版本兼容指南)
Spring Boot打包进阶spring-boot-maven-plugin的7个实战技巧与版本适配指南在Spring Boot项目的日常开发中打包环节往往是决定应用最终部署形态的关键步骤。许多开发者仅仅满足于默认的打包配置却不知道spring-boot-maven-plugin这个看似简单的插件背后隐藏着强大的定制能力。本文将带你深入探索这个插件的7个高阶用法同时针对不同Spring Boot版本2.x/3.x的配置差异提供详细指南。1. 插件基础配置与版本选择策略正确配置spring-boot-maven-plugin的第一步是理解版本管理机制。在Spring Boot生态中插件版本通常与父POM版本保持一致这是避免兼容性问题的黄金法则。build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId version${spring-boot.version}/version !-- 与父POM版本一致 -- /plugin /plugins /build版本适配要点Spring Boot 2.x系列建议使用对应的小版本号如2.7.15Spring Boot 3.x系列需要Java 17支持配置语法有部分调整跨版本升级时特别注意3.x移除了对部分旧特性的支持提示在多人协作项目中建议通过properties统一管理版本号避免团队成员配置不一致导致的问题。2. 依赖排除的精细控制默认情况下插件会将所有依赖打包进可执行jar但实际场景中我们经常需要排除某些特定依赖configuration excludes exclude groupIdorg.projectlombok/groupId artifactIdlombok/artifactId /exclude exclude groupIdcom.example/groupId artifactIddev-tools/artifactId /exclude /excludes /configuration典型排除场景依赖类型排除原因常见示例Provided由运行环境提供Tomcat-embed, LombokTest仅测试需要JUnit, MockitoDevelopment开发工具Spring Boot DevTools3. 主类指定与启动配置当项目中有多个main方法时必须明确指定启动类configuration mainClasscom.example.Application/mainClass arguments argument--spring.profiles.activeprod/argument /arguments jvmArguments-Xmx512m -Dlogging.level.rootINFO/jvmArguments /configuration版本差异注意Spring Boot 2.x支持传统的属性配置方式Spring Boot 3.x推荐使用image标签进行容器化配置4. 生成普通JAR与可执行JAR并存有时我们需要同时生成两种jar包普通jar供其他项目依赖可执行jar用于部署。这可以通过以下配置实现executions execution idrepackage/id goals goalrepackage/goal /goals configuration classifierexec/classifier !-- 为可执行jar添加分类器 -- /configuration /execution /executions打包后会得到两个文件your-app-1.0.0.jar普通jaryour-app-1.0.0-exec.jar可执行jar5. 分层构建优化Docker镜像Spring Boot 2.3支持分层打包可显著优化Docker镜像构建效率configuration layers enabledtrue/enabled /layers /configuration典型的分层结构dependencies第三方依赖变化最少spring-boot-loaderSpring Boot加载器snapshot-dependencies快照依赖application应用代码变化最频繁对应的Dockerfile示例FROM eclipse-temurin:17-jre as builder WORKDIR application ARG JAR_FILEtarget/*.jar COPY ${JAR_FILE} application.jar RUN java -Djarmodelayertools -jar application.jar extract FROM eclipse-temurin:17-jre WORKDIR application COPY --frombuilder application/dependencies/ ./ COPY --frombuilder application/spring-boot-loader/ ./ COPY --frombuilder application/snapshot-dependencies/ ./ COPY --frombuilder application/application/ ./ ENTRYPOINT [java, org.springframework.boot.loader.JarLauncher]6. 构建信息生成与集成插件可以自动生成build-info.properties文件包含有价值的构建元数据executions execution goals goalbuild-info/goal /goals /execution /executions生成的信息示例build.artifactmy-application build.groupcom.example build.namemy-application build.time2023-08-20T12:34:56Z build.version1.0.0这些信息可以通过Spring Boot的InfoContributor机制暴露给监控端点SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } Bean public InfoContributor buildInfoContributor() { return new InfoContributor() { Override public void contribute(Info.Builder builder) { builder.withDetail(build, new ClassPathResource(META-INF/build-info.properties)); } }; } }7. 容器化构建进阶技巧Spring Boot 2.3原生支持通过Buildpacks创建Docker镜像无需编写Dockerfileconfiguration image namedocker.io/myorg/${project.artifactId}:${project.version}/name env BP_JVM_VERSION17/BP_JVM_VERSION BPE_APPEND_JAVA_TOOL_OPTIONS-Xmx512m/BPE_APPEND_JAVA_TOOL_OPTIONS /env buildpacks buildpackpaketo-buildpacks/java/buildpack /buildpacks /image /configuration版本兼容性注意Spring Boot 2.4支持基础镜像定制Spring Boot 2.7支持多架构镜像构建Spring Boot 3.0默认使用Paketo Jammy基础镜像构建命令mvn spring-boot:build-image -Dspring-boot.build-image.imageNamemy-registry/my-app:v1版本兼容性深度解析不同Spring Boot版本在插件配置上存在一些关键差异以下是主要变化点的对比特性Spring Boot 2.4-2.7Spring Boot 3.0Java版本要求817默认基础镜像Ubuntu BionicUbuntu Jammy分层索引文件layers.idx新增的layers.idx格式容器构建配置增强插件目标repackage新增build-image迁移建议先升级到最新的2.7.x版本确保无兼容问题解决Java 17的兼容性问题更新插件配置语法测试容器构建流程对于大型项目可以采用分模块渐进式升级策略先升级非核心模块逐步验证稳定性。

更多文章