You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署SpringBoot 3.3应用为AWS Lambda时遭遇ClassNotFoundException

解决SpringBoot 3.3部署AWS Lambda时的ClassNotFoundException问题

问题原因

SpringBoot默认通过spring-boot-maven-plugin打包的是可执行JAR,这类JAR的类文件统一存放在BOOT-INF/classes目录下,依赖包则在BOOT-INF/lib中。而AWS Lambda的Java运行时类加载器只会扫描JAR根目录下的类文件,无法识别SpringBoot这种嵌套结构的类路径,因此找不到你指定的org.xyz.service.api.http.xxx.AwsLambdaHandler类。

解决方案

方案1:使用Spring Cloud Function适配器(推荐)

Spring Cloud Function专为SpringBoot应用部署到Lambda做了适配,自动处理类路径问题,步骤如下:

  1. 在pom.xml中添加依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-function-adapter-aws</artifactId>
</dependency>
  1. 修改Lambda的处理器配置为:org.springframework.cloud.function.adapter.aws.FunctionInvoker::handleRequest
  2. 确保你的AwsLambdaHandler实现Function(或Supplier/Consumer等函数式接口),或者通过@Bean定义一个函数类型的Bean。

方案2:调整打包方式为普通JAR(不推荐)

若不想使用Spring Cloud Function,可修改Maven配置生成普通JAR,让类直接处于JAR根目录:

  1. 移除或禁用spring-boot-maven-plugin的可执行打包逻辑,改用maven-jar-plugin:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>org.xyz.service.api.http.xxx.AwsLambdaHandler</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>
  1. 用maven-dependency-plugin将依赖包复制到独立目录,再将JAR和依赖目录一起打包成ZIP上传到Lambda(此方式需手动处理依赖,较为繁琐)。

额外排查点

  • 确认AwsLambdaHandler类为public,且handleRequest方法是public、static(若为普通类),同时方法签名符合Lambda要求的输入输出类型。
  • 用jar tf your-jar-file.jar命令检查打包后的类路径,确保类的存放位置符合Lambda类加载器的扫描规则。

内容的提问来源于stack exchange,提问作者Abdul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 06:20:57