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

运行时出现AmazonDynamoDBClientBuilder的NoClassDefFoundError,求助排查

解决java.lang.NoClassDefFoundError: com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder异常

这个错误本质是你的Lambda运行环境中找不到AmazonDynamoDBClientBuilder类,90%以上的情况是DynamoDB SDK依赖没有正确打包到部署包中,或者依赖版本/类型不匹配,下面是具体的解决步骤:

1. 确认依赖配置正确

首先检查你的项目依赖管理文件(Maven/Gradle),确保已经添加了正确的DynamoDB SDK v1依赖:

Maven 配置

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-dynamodb</artifactId>
    <version>1.12.500</version> <!-- 选择与Lambda运行时兼容的版本,比如Java 8选1.x系列,Java 17也支持1.x -->
    <scope>compile</scope> <!-- 不要用provided,Lambda当前的Java运行时不再默认携带旧版SDK -->
</dependency>

Gradle 配置

implementation 'com.amazonaws:aws-java-sdk-dynamodb:1.12.500'

⚠️ 注意:如果你误引入了AWS SDK v2的依赖,类名会变成software.amazon.awssdk.services.dynamodb.DynamoDbClientBuilder,和v1的类完全不同,这种混版本的情况也会导致找不到类的问题。

2. 正确打包包含所有依赖的部署包

Lambda要求部署包包含你的代码以及所有依赖的类文件,只打包自己的代码是不行的。这里推荐用插件来构建胖包:

Maven 用maven-shade-plugin

在pom.xml的<build>节点下添加插件配置:

<plugins>
    <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>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>

执行mvn package后,target目录下带-shaded后缀的JAR就是可以上传到Lambda的包。

Gradle 用shadowJar插件

在build.gradle中添加插件:

plugins {
    id 'com.github.johnrengelman.shadow' version '7.1.2'
}

执行./gradlew shadowJar,生成的JAR在build/libs目录下,通常是项目名-all.jar。

3. 验证部署包内容

解压生成的部署包,检查是否存在com/amazonaws/services/dynamodbv2/AmazonDynamoDBClientBuilder.class文件。如果没有,说明依赖没被打包进去,需要重新检查插件配置或者依赖的scope是否正确。

4. 匹配Lambda运行时版本

确保Lambda的Java运行时版本和你项目编译时的版本一致(比如项目用Java 8编译,Lambda就选Java 8运行时),避免因JVM版本不兼容导致的类加载问题。

如果按上面的步骤操作后还是有问题,可以检查依赖树是否有冲突(比如其他依赖引入了不同版本的DynamoDB SDK),用mvn dependency:tree或者./gradlew dependencies来排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:02:32