运行时AmazonDynamoDBClientBuilder的NoClassDefFoundError

时间:2018-03-25 02:18:57

标签: java amazon-web-services aws-lambda amazon-dynamodb aws-sdk

我遇到异常并且无法弄清楚到底出了什么问题?

START RequestId: 6e561b8c-2fd0-11e8-8bd0-edfc4c9a75aa Version: $LATEST
com/amazonaws/services/dynamodbv2/AmazonDynamoDBClientBuilder: **java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: com/amazonaws/services/dynamodbv2/AmazonDynamoDBClientBuilder**
    at com.tarkshala.dynamodb.StudentDAOImpl.create(StudentDAOImpl.java:12)
    at com.tarkshala.lambda.StudentController.handleRequest(StudentController.java:16)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
Caused by: java.lang.ClassNotFoundException: com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 6 more

我的pom.xml如下所示:

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>1.11.301</version>
    </dependency>

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-lambda-java-core</artifactId>
        <version>1.2.0</version>
    </dependency>

即使我的IDE正在解决类定义,那么为什么它会在运行时产生问题?

1 个答案:

答案 0 :(得分:1)

从错误消息中看起来您正在尝试从Java实现的Lambda函数中查询DynamoDb。

使用基于Java的AWS Lambda函数时,您的函数代码必须包含所有依赖项。您不能依赖Lambda来解决pom.xml中的依赖关系,就像使用Maven的本地系统一样。

最常见的方法是生成一个JAR(通常称为“胖JAR”),其中包含代码和代码所需的所有依赖项(通常是类路径中执行代码所需的所有内容)。

将代码中的依赖项与代码一起部署到Lambda后,事情应该按照您的预期开始工作。

请参阅:有关如何generate a fat JAR using a Maven plugin

的详细信息