spring boot 可执行 jar 瘦身的核心方法是分离依赖、排除无用资源、启用分层构建或改用 thin jar:1. 改 layout 为 zip 实现瘦 jar+外置 lib;2. 排除 test 依赖及冗余传递依赖;3. spring boot 2.3+ 启用分层 jar 提升 docker 构建效率;4. 使用 spring-boot-thin-launcher 打造极小 thin jar。

Spring Boot 默认打包的可执行 JAR 是“胖 JAR”(fat jar),包含所有依赖和嵌入式容器,体积较大。要瘦身,核心思路是:**分离依赖、排除无用资源、启用分层构建、或改用 thin jar 模式**。下面几种实用方式可显著减小最终部署包体积。
1. 使用 spring-boot-maven-plugin 的 layout=ZIP + 外置依赖
默认 layout 是 JAR(即 fat jar),改为 ZIP 后,Maven 会把应用类和资源打成一个精简的 ZIP,依赖保留在 lib/ 目录中,运行时通过 -cp 加载——这本质是“瘦 JAR + 外置 lib”结构。
配置示例:
<plugin><groupid>org.springframework.boot</groupid><artifactid>spring-boot-maven-plugin</artifactid><configuration><layout>ZIP</layout></configuration></plugin>
执行 mvn clean package 后,输出目录下会生成:
-
myapp.jar(仅含自己代码 + resources + BOOT-INF/classes) -
lib/(所有依赖 JAR)
启动命令变为:java -cp "myapp.jar:lib/*" com.example.MyApp(Linux/macOS)
或 java -cp "myapp.jar;lib/*" com.example.MyApp(Windows)
2. 排除无用依赖和资源
很多依赖(如测试库、文档、源码、重复的 logging 实现)会被打进 fat jar 却从不运行。可在 pom.xml 中精准排除:
- 移除
testscope 的依赖(确保没漏掉<scope>test</scope>却被误打进) - 排除传递性冗余依赖,例如:
<exclusions><exclusion><groupid>org.springframework.boot</groupid><artifactid>spring-boot-devtools</artifactid></exclusion></exclusions> - 跳过非必要资源:
在<build></build>中配置<resources></resources>,只包含application.yml等必需文件,过滤掉doc/、sql/、*.md等
3. 启用分层 JAR(Layered JAR)提升复用率
虽不直接减小单个 JAR 体积,但能大幅优化容器镜像构建(Docker)时的分层缓存——让依赖层、资源层、类层独立,变更代码时仅重传最上层。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
启用方式(Spring Boot 2.3+):
<plugin><groupid>org.springframework.boot</groupid><artifactid>spring-boot-maven-plugin</artifactid><configuration><image><builder>paketobuildpacks/builder-jammy-base:latest</builder></image><layers><enabled>true</enabled></layers></configuration></plugin>
执行 mvn spring-boot:build-image 或 mvn package(配合 Dockerfile 使用)即可生成分层结构。也可用 java -Djarmode=layertools -jar app.jar list 查看分层内容。
4. 改用 thin jar(需额外插件)
官方插件不直接支持 thin jar,但可通过 spring-boot-thin-launcher 实现:它把应用打成极小的 JAR(仅含主类 + 配置),运行时动态下载并缓存依赖。
步骤简述:
- 添加依赖:
<dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-thin-launcher</artifactid></dependency> - 配置插件:
<plugin><groupid>org.springframework.boot</groupid><artifactid>spring-boot-maven-plugin</artifactid><dependencies><dependency><groupid>org.springframework.boot.experimental</groupid><artifactid>spring-boot-thin-maven-plugin</artifactid><version>1.0.28.RELEASE</version></dependency></dependencies></plugin> - 执行
mvn package,得到约 10–50KB 的 thin jar - 首次运行会拉取依赖到
~/.m2/repository或自定义仓库,后续启动极快
适合 CI/CD 流水线中依赖稳定、网络可控的场景。
不复杂但容易忽略:瘦身不是越小越好,需权衡启动速度、部署便捷性与运维复杂度。生产推荐 ZIP layout + 外置 lib 或分层 JAR;CI/CD 密集场景可试 thin jar。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










