如何减小Spring Boot Jar包体积?遇Thin Launcher报错求助
问题分析与解决方案
1. 解决spring-boot-thin-launcher报错
你遇到的ThrowingConsumer缺失问题,核心原因是spring-boot-thin-launcher 1.x版本不兼容Spring Boot 3.x。Spring Boot 3.x需要使用thin launcher的2.x适配版本,修改插件依赖版本即可:
<dependency> <groupId>org.springframework.boot.experimental</groupId> <artifactId>spring-boot-thin-launcher</artifactId> <version>2.0.1.RELEASE</version> <!-- 适配Spring Boot 3.x版本 --> </dependency>
2. 大幅缩减Jar包体积(从500MB+降至几十MB)
Jar包过大主要源于冗余依赖、AWS SDK版本混用及全量包引入,做以下关键修改:
移除不必要依赖
删除spring-boot-starter-thymeleaf:Lambda函数不需要Web模板引擎,该依赖会引入大量Web相关包,是体积膨胀的主要诱因。
清理AWS SDK依赖(避免1.x/2.x混用+全量包引入)
你同时引入了AWS SDK 1.x(aws-java-sdk-ses)和2.x全量包(aws-sdk-java),导致依赖重复、体积暴增。正确做法:
- 使用AWS SDK 2.x的BOM统一版本,避免版本冲突
- 仅引入实际需要的单个SDK模块(而非全量包)
修改后的AWS依赖配置:
<properties> <aws.sdk.version>2.20.120</aws.sdk.version> <!-- 统一SDK版本 --> </properties> <dependencyManagement> <dependencies> <!-- AWS SDK 2.x BOM,统一管理所有SDK模块版本 --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>${aws.sdk.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- 仅引入需要的SES模块(SDK 2.x) --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>ses</artifactId> </dependency> <!-- Lambda Log4j2适配 --> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-log4j2</artifactId> <version>1.5.1</version> </dependency> <!-- Spring Boot Lambda适配(简化Lambda入口编写) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aws-lambda</artifactId> </dependency> </dependencies>
优化打包配置
启用Spring Boot分层打包,进一步提升Lambda部署效率:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <layers> <enabled>true</enabled> </layers> </configuration> <dependencies> <dependency> <groupId>org.springframework.boot.experimental</groupId> <artifactId>spring-boot-thin-launcher</artifactId> <version>2.0.1.RELEASE</version> </dependency> </dependencies> </plugin>
3. 完整修改后的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.2</version> <relativePath/> </parent> <groupId>au.com.agrifhm</groupId> <artifactId>abcd</artifactId> <version>1.0</version> <name>abcd</name> <description>abcd</description> <properties> <maven.compiler.source>17</maven.compiler.source> <!-- Spring Boot 3.x要求JDK 17+ --> <maven.compiler.target>17</maven.compiler.target> <aws.sdk.version>2.20.120</aws.sdk.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>${aws.sdk.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- Spring Boot Lambda适配 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aws-lambda</artifactId> </dependency> <!-- AWS SES SDK 2.x --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>ses</artifactId> </dependency> <!-- Lambda Log4j2适配 --> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-log4j2</artifactId> <version>1.5.1</version> </dependency> <!-- 测试依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <layers> <enabled>true</enabled> </layers> </configuration> <dependencies> <dependency> <groupId>org.springframework.boot.experimental</groupId> <artifactId>spring-boot-thin-launcher</artifactId> <version>2.0.1.RELEASE</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>
额外注意事项
- Spring Boot 3.x要求JDK 17+,确保编译环境符合要求
- 若需离线打包thin launcher,可在插件配置中添加
<thin.archive>true</thin.archive> - 部署Lambda时,还可尝试Spring Native编译成镜像,进一步缩减体积和启动时间
内容的提问来源于stack exchange,提问作者Sandeep Kumar
相关产品推荐
相关产品推荐

