AWS Lambda NoClassDefFoundError

J'ai de la difficulté avec un Java Lambda fonction de la configuration de recevoir des messages de SNS. Ma fonction ressemble à la ci-dessous:

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

Il compile très bien et je n'ai pas de problèmes en téléchargeant le fichier jar pour Lambda (via la console web).

Cependant, quand j'y publier (via SNS grâce à l'abonné Lambda fonction) avec JSON représentant le SNSEvent modèle, la fonction Lambda jette l'exception suivante:

Erreur lors du chargement du gestionnaire de méthode de la classe com.mycompany.LambdaHandler:
la classe java.lang.NoClassDefFoundError java.lang.NoClassDefFoundError:
com/amazonaws/services/lambda/runtime/événements/SNSEvent à

java.lang.Classe.getDeclaredMethods0(Native method) at
java.lang.Classe.privateGetDeclaredMethods(de la Classe.java:2701) à
java.lang.Classe.privateGetPublicMethods(de la Classe.java:2902) à
java.lang.Classe.getMethods(de la Classe.java:1615) Causés par:
java.lang.ClassNotFoundException:
com.amazonaws.services.lambda.moment de l'exécution.les événements.SNSEvent à
java.net.URLClassLoader.findClass(URLClassLoader.java:381), au
java.lang.Chargeur de classe.loadClass(ClassLoader.java:424) à
java.lang.Chargeur de classe.loadClass(ClassLoader.java:357)

J'utilise Maven + Netbeans et c'est un Maven projet d'Application Java. J'ai téléchargé la fonction à partir de la console Lambda et confirmé, le pot a un répertoire lib/avec tout le pot pour les importations, y compris aws-lambda-java-events-1.1.0.jar qui lui-même comprend l' /com/amazonaws/services/lambda/runtime/events/SNSEvent.class fichier.

Pourquoi l'exécution impossible de trouver la classe quand il est bien dans le fichier jar? Est-il autre chose que je dois faire, définissez les variables d'environnement, etc?

Toute aide serait appréciée!

EDIT 1
J'ai essayé la rétrogradation à la aws lambda-java-événements 1.0.0 et c'est toujours la même exception. Comme demandé, voici ma POM fichier (avec juste le nom du projet ont changé). Je ne sais pas comment le dire à Maven de mettre les bibliothèques dans une structure en arbre.

<?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>
  • Pouvez-vous partager la section pertinente de votre fichier Maven? Mon comparable fonction Lambda n'a pas le bundle aws-lambda-java-events-1.1.0.jar en vertu de la lib, il avait l'SNSEvent.class fichier lâche com/amazonaws/services/lambda/runtime/events/SNSEvents.class.
  • Je peux ce soir, quand je rentre à la maison, mais que voulez-vous dire qu'il a la SNSEvent.class fichier "lâche"? Comment ça marche s'il ne fournit pas l'environnement d'exécution avec la bibliothèque du pot?
  • Mon projet n'a pas de bundle leur pot à l'intérieur de mon bocal. Il regroupe les classes compilées dans mon jar dans le classpath dossier à côté de la hiérarchie des classes compilées pour mon code.
  • Juste mis à jour l'OP avec mon fichier pom. Comment voulez-vous mettre les bibliothèques dans une structure en arbre? Merci!
  • Malheureusement, je ne suis pas maven expert. Mon pom.xml est semblable à la vôtre, mais je n'ai que deux dépendances: aws-lambda-java-core 1.0.0 et aws-lambda-java-events 1.1.0.
  • Alors je ne suis pas sûr de savoir comment cela fonctionne pour vous. J'ai dû inclure le maven ombre plugin tel que décrit par Mike ci-dessous afin de l'obtenir pour fonctionner.

InformationsquelleAutor Brooks | 2015-09-25