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

Spring Boot通过Serverless部署AWS Lambda报ClassNotFoundException如何解决

报错日志:

START RequestId: 38c9bbd7-c7f1-4779-9486-c19c22528fc4 Version: $LATEST
Class not found: com.application.lambda.LambdaMethodHandler: java.lang.ClassNotFoundException
java.lang.ClassNotFoundException: com.application.lambda.LambdaMethodHandler. Current classpath: file:/var/task/
问题根因

你怀疑的情况完全正确。Spring Boot默认生成的可执行JAR采用专属的类加载结构,业务自定义类统一存放在BOOT-INF/classes/路径下,第三方依赖存放在BOOT-INF/lib/路径下。而AWS Lambda的Java运行时类加载器仅会扫描部署包根路径下的类和资源,无法识别BOOT-INF目录下的内容,因此会触发类找不到的异常。

Java 11环境适配解决方案

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

该方案为官方适配方案,无需手动调整打包结构,兼容性更强:

  • 首先在pom.xml中引入适配依赖,需匹配你使用的Spring Boot版本,示例适配Spring Boot 2.7.x + Java 11的依赖配置如下:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-function-adapter-aws</artifactId>
    <version>3.2.9</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-events</artifactId>
    <version>3.11.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-core</artifactId>
    <version>1.2.21</version>
    <scope>provided</scope>
</dependency>
  • 修改你的Handler类继承官方父类,自动加载Spring上下文:
package com.application.lambda;

import org.springframework.cloud.function.adapter.aws.SpringBootRequestHandler;

public class LambdaMethodHandler extends SpringBootRequestHandler<Object, Object> {
    // 无需额外实现逻辑,父类会自动完成Spring上下文初始化和请求路由
}
  • 执行mvn clean package打包,生成的JAR可直接上传到Lambda部署。

方案2:调整Maven Shade插件配置(适配你当前已使用Shade的场景)

如果不想引入额外依赖,可直接修改Shade插件配置,把BOOT-INF下的类移到JAR包根路径:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.4.1</version>
    <configuration>
        <createDependencyReducedPom>false</createDependencyReducedPom>
        <filters>
            <filter>
                <artifact>*:*</artifact>
                <excludes>
                    <!-- 排除签名文件避免运行时校验错误 -->
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                </excludes>
            </filter>
        </filters>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <!-- 合并Spring的配置文件避免冲突 -->
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.handlers</resource>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.schemas</resource>
                    </transformer>
                    <!-- 指定主类为你的Lambda处理器 -->
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.application.lambda.LambdaMethodHandler</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
  • 配置完成后执行mvn clean package,生成的带有shaded后缀的JAR即可直接上传部署
  • 确认Lambda控制台运行时选择Java 11 (Corretto),「处理程序」配置填写com.application.lambda.LambdaMethodHandler即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 16:09:02