gpt4 book ai didi

amazon-web-services - AWS Lambda NoClassDefFoundError

转载 作者:行者123 更新时间:2023-12-03 10:02:55 26 4
gpt4 key购买 nike

我在使用基于Java的Lambda函数设置以接收来自SNS的消息时遇到困难。我的函数如下所示:

package com.mycompany;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.events.SNSEvent;

public class LambdaHandler {
public void Handler(SNSEvent event, Context context) {
//Process the event
}
}

它可以很好地编译,并且我将jar文件上传到Lambda(通过Web控制台)没有任何问题。

但是,当我使用代表SNSEvent模型的JSON发布(通过SNS到订阅的Lambda函数)时,Lambda函数引发以下异常:

Error loading method handler on class com.mycompany.LambdaHandler: class java.lang.NoClassDefFoundError java.lang.NoClassDefFoundError: com/amazonaws/services/lambda/runtime/events/SNSEvent at

java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) at java.lang.Class.privateGetPublicMethods(Class.java:2902) at java.lang.Class.getMethods(Class.java:1615) Caused by: java.lang.ClassNotFoundException: com.amazonaws.services.lambda.runtime.events.SNSEvent at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357)



我使用Maven + Netbeans,这是一个Maven Java应用程序项目。我从Lambda控制台下载了该函数,并确认该jar具有一个lib /目录,其中包含所有要导入的jar,包括aws-lambda-java-events-1.1.0.jar,其本身包含/ com / amazonaws /services/lambda/runtime/events/SNSEvent.class文件。

为什么肯定在jar文件中的类无法在运行时找到该类?我还需要做其他事情,设置任何环境变量等吗?

任何帮助,将不胜感激!

编辑1
我尝试降级为aws-lambda-java-events 1.0.0,但仍在报告相同的异常。根据要求,以下是我的POM文件(仅更改了项目名称)。我不知道如何告诉Maven将库放入树形结构中。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.app</groupId>
<artifactId>Handler</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-lambda</artifactId>
<version>1.10.6</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>

最佳答案

使用maven-shade plugin,以便JAR在uber-jar中包含依赖项。

因此,将其添加到您的pom.xml

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>

资料来源: http://docs.aws.amazon.com/lambda/latest/dg/java-create-jar-pkg-maven-no-ide.html

您可能会遇到 https://github.com/aws/aws-lambda-java-libs/issues/2问题,该问题需要降级为aws-lambda-java-events-1.0.0.jar

关于amazon-web-services - AWS Lambda NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32782980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com