当前位置: 首页 > 知识库问答 >
问题:

AWS Lambda NoClassDefFoundError

公冶麒
2023-03-14

我很难使用基于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(通过网络控制台)没有任何问题。

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

在类com上加载方法处理程序时出错。我的公司。LambdaHandler:java类。NoClassDefFoundErrorJava。lang.NoClassDefFoundError:com/amazonaws/services/lambda/runtime/events/SNSEvent at

java.lang.Class.getDeclared方法0(本机方法)java.lang.Class.privateGetDeclared方法(Class.java:2701)java.lang.Class.privateGetPublic方法(Class.java:2902)java.lang.Class.get方法(Class.java:1615)引起:java.lang.ClassNotFoundExcture:com.amazonaws.services.lambda.runtime.events.SNSEent atjava.net.URLClassLoader.find(URLClassLoader.java:381)atjava.lang.ClassLoader.load类(ClassLoader.java:424)在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。类文件。

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

任何帮助都将不胜感激!

编辑1我试图降级到AWS-lambda-java-event1.0.0,它仍然报告相同的异常。根据要求,下面是我的POM文件(仅更改了项目名称)。我不知道如何告诉马文把库放在树状结构中。

<?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>

共有3个答案

桑坚
2023-03-14

===如果这个问题存在,即使包括阴影罐===

如果您在使用shaded jar之后仍然存在此问题,则该问题应该与AWS-lambda-java-event包版本相关(AWS lamda版本和较新的AWS-lambda-java-event版本之间应该存在一些不兼容)。我有这个问题的最新版本(2.0.2)的AWS-lambda-java-event包,我不得不降级到1.3.0版本。

似乎较新的aws-lambda-java事件版本没有很多依赖项。

梁丘翔
2023-03-14

有时你必须再次上传你的lambda。我也得到了同样的问题,我修复了这个pom.xml:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

   <dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-bom</artifactId>
      <version>1.11.83</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>

 </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

   <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>
 </build>
</project>
商绍元
2023-03-14

使用maven shade插件,使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>
  </build>

资料来源: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

 类似资料:

相关问答

相关文章

相关阅读