我正面临AWS Lambda函数Java的困难

时间:2016-02-26 13:32:09

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

我已经创建了AWS lambda函数并添加了依赖项,但是当我上传jar并点击Test时它会向我显示此错误

Error loading method JSONtoURL on class MinimumTool.Index: class 
java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: org/json/JSONObject
    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: org.json.JSONObject
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 4 more

我已经使用maven和eclipse来创建jar。 这是我的pom.xml文件

<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>minimum-tool</groupId>
  <artifactId>lamda-pricing-tool</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>lamda-pricing-tool</name>
  <description>Minimum Pricing Tool</description>
  <dependencies>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-lambda-java-core</artifactId>
        <version>1.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20151123</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.3</version>
    </dependency>
  </dependencies>
</project>

2 个答案:

答案 0 :(得分:1)

似乎您在pom.xml中声明对org.json:json的依赖,假设相关的类/ jar将在运行时可用。当您在希望这些类可用的环境中部署应用程序时,通常就是这种情况。但是,如果您将其作为独立应用程序运行,那么maven packagemaven install等命令创建的jar 包含它们。因此,您必须采取额外步骤将这些依赖类实际捆绑到jar中,通常称为 uber jar。

查看maven shade plugin并使用其生成的jar运行您的应用。

答案 1 :(得分:1)

您需要创建一个名为Deployment Package的zip文件,其中包含您的所有代码,以及您的代码使用的所有其他jar文件。

亚马逊有一些关于使用Eclipse和Maven执行此操作的文档:http://docs.aws.amazon.com/lambda/latest/dg/java-create-jar-pkg-maven-and-eclipse.html

特别是

  • 右键单击pom.xml文件,选择Maven,添加插件。添加组org.apache.maven.plugins,工件maven-shade-plugin,版本2.3或更高版本。
  • 右键单击该项目,选择Run As,Maven build。编辑配置并将package shade:shade添加到目标中。

现在,当您使用Run构建项目时,它将构建一个Deployment Package jar。