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

Spring Boot部署AWS Lambda时外部Jar加载失败求助

问题描述

我正在开发一个Spring Boot服务,计划部署到AWS Lambda中。项目lib目录下包含以下依赖Jar:

02/24/2023  10:52 AM    <DIR>          .
02/24/2023  10:52 AM    <DIR>          ..
02/24/2023  10:52 AM           118,397 PaymentechSDK_7.4.jar
02/24/2023  10:52 AM         6,347,540 PayPalAPIInterfaceService-test-client.jar
02/24/2023  10:52 AM         4,015,472 PayPal_stub.jar
02/24/2023  10:52 AM            89,343 sunrsasign.jar

该服务在本地环境运行正常,但部署到AWS Lambda后出现如下错误:

org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:267)
    ... 23 more
    Caused by: java.lang.NoClassDefFoundError: 
   com/paymentech/orbital/sdk/util/exceptions/InitializationException
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2729)
    at java.lang.Class.getDeclaredMethods(Class.java:2003)
    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:467)
    ... 25 more
    Caused by: java.lang.ClassNotFoundException: 
    com.paymentech.orbital.sdk.util.exceptions.InitializationException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 29 more
解决方法

1. 确保依赖打包完整

本地正常但Lambda报错,核心是PaymentechSDK_7.4.jar未被正确纳入部署包,或Lambda类加载路径无法访问到它:

  • Maven环境:检查pom.xml中该依赖的scope为compile(不要设为provided/test);如果是本地手动添加的Jar,需通过system依赖声明并开启系统依赖打包:
<dependency>
    <groupId>com.paymentech</groupId>
    <artifactId>orbital-sdk</artifactId>
    <version>7.4</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/PaymentechSDK_7.4.jar</systemPath>
</dependency>

同时在打包插件(如spring-boot-maven-plugin)中配置:

<configuration>
    <includeSystemScope>true</includeSystemScope>
</configuration>
  • Gradle环境:直接添加本地Jar依赖,确保打包任务包含该文件:
dependencies {
    implementation files('lib/PaymentechSDK_7.4.jar')
}

2. 检查Lambda部署包结构

Lambda要求依赖需放在部署包根目录或指定路径:

  • 若直接上传Spring Boot Fat Jar:确认PaymentechSDK_7.4.jar被打包在BOOT-INF/lib目录下;
  • 若使用Lambda层:将PaymentechSDK_7.4.jar放到层的java/lib目录,再将层关联到目标Lambda函数,Lambda会自动将层内依赖加入类路径。

3. 验证Jar内是否包含缺失类

手动检查PaymentechSDK_7.4.jar是否存在目标类:

jar tf PaymentechSDK_7.4.jar | grep com/paymentech/orbital/sdk/util/exceptions/InitializationException

若输出为空,说明当前Jar不包含该类,需重新获取完整的Paymentech SDK包。

4. 对齐运行时版本

确保Lambda使用的Java运行时版本与本地一致(比如本地用Java 8,Lambda选Corretto 8),避免版本兼容性导致类加载问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:57:28