AWS lambda JAVA:外部库的使用

use*_*629 1 java amazon-web-services aws-lambda

上传并运行我的java .jar文件后,我收到警告和错误.警告是:

This function contains external libraries. Uploading a new file will override these libraries.
Run Code Online (Sandbox Code Playgroud)

而且错误是:

java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpUriRequest
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)   
Run Code Online (Sandbox Code Playgroud)

我可以构建jar没问题,所有依赖都在我的pom中.我有一些我正在使用的库,比如org.json,它也会抛出相同的java.lang.NoClassDefFoundError错误.我确实导入了这些类.然而,我的jar不包括这些文件,只包括我的课程.我怀疑这是相关的.真的吗?我是否需要为我正在使用的这些"外部"类找到亚马逊类替换?我糊涂了.

Mar*_*k B 7

Amazon Lambda不会为您下载您的依赖项.它希望您的部署文件包含运行Lambda函数所需的所有依赖项.您将需要切换到使用zip部署方法,该方法允许您包含多个jar文件(您的Lambda函数jar和所有依赖项jar).按照此处的说明操作.


Man*_*odi 6

另一种选择是创建一个 fat jar 文件。那是一个已经包含您所有依赖项的 jar。此类文件部署起来会更大,但更易于管理。我建议您使用一些构建工具(例如Maven)来构建 fat jar。