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

SpringBoot部署AWS Lambda遇ClassNotFoundException问题求助

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

排查maven-shade-plugin配置

  • 确认插件是否正确打包了所有依赖与目标类,重点检查com.cicdpipeline包下的类是否被包含。避免配置中出现错误的<include>/<exclude>规则,同时确保transformers配置正确处理Spring相关资源。
    参考正确配置片段:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.4.1</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <mainClass>com.cicdpipeline.Application</mainClass>
                        </transformer>
                        <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>
                    </transformers>
                </configuration>
            </execution>
        </executions>
    </plugin>
    
  • 执行mvn clean package后,解压target目录下的生成jar包,检查BOOT-INF/classes/com/cicdpipeline/路径下是否存在LambdaHandler.class。如果缺失,说明打包过程未包含该类,需调整插件配置或确认类的编译路径正确。

检查Lambda部署包

  • 确认上传到Lambda的是maven-shade-plugin生成的完整可执行jar(通常文件名带-shaded后缀,或为主jar包,取决于配置),而非普通依赖jar或未打包完整的文件。
  • 若用AWS SAM/CDK部署,核对配置中指定的jar包路径是否正确。

修正Lambda处理程序配置

  • Lambda控制台的“处理程序”字段需指向具体方法,格式为包名.类名::方法名。如果你的LambdaHandler类是如下实现:
    package com.cicdpipeline;
    
    import com.amazonaws.serverless.proxy.spring.SpringLambdaContainerHandler;
    import com.amazonaws.services.lambda.runtime.Context;
    import com.amazonaws.services.lambda.runtime.RequestHandler;
    import com.amazonaws.serverless.proxy.model.APIGatewayProxyRequestEvent;
    import com.amazonaws.serverless.proxy.model.APIGatewayProxyResponseEvent;
    
    public class LambdaHandler implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
        private static SpringLambdaContainerHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> handler;
    
        static {
            try {
                handler = SpringLambdaContainerHandler.getAwsProxyHandler(Application.class);
            } catch (Exception e) {
                throw new RuntimeException("Spring容器初始化失败", e);
            }
        }
    
        @Override
        public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) {
            return handler.proxy(input, context);
        }
    }
    
    则处理程序应配置为com.cicdpipeline.LambdaHandler::handleRequest,而非::SpringLambdaContainerHandler——Lambda需要调用具体的处理方法,而非类的静态字段。

验证类编译与包路径

  • 确认LambdaHandler.java的包声明为package com.cicdpipeline;,无拼写错误。
  • 执行mvn clean compile,检查target/classes/com/cicdpipeline/下是否生成LambdaHandler.class,确保编译过程无报错。

核心参考要点

AWS官方部署SpringBoot到Lambda的关键规则:

  • 必须用maven-shade-plugin或gradle-shadow-plugin打包包含所有依赖的fat jar。
  • Spring Lambda容器的handler类需实现RequestHandler或RequestStreamHandler接口,并正确初始化Spring上下文。
  • 处理程序配置必须指向类的具体方法,格式严格遵循包名.类名::方法名。

内容的提问来源于stack exchange,提问作者Mr.DevEng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:22:37