2017-01-02 123 views
0

我上传并运行我的java .jar文件后,出现警告和错误。 的警告是:AWS lambda JAVA:使用外部库

This function contains external libraries. Uploading a new file will override these libraries. 

和错误是:

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) 

我可以建立罐子没有问题,所有的依赖都在我的POM。我有一些我正在使用的库,例如org.json,它也会抛出相同的java.lang.NoClassDefFoundError错误。我会导入这些类。但我的jar不包括这些文件,只包括我的课程。我怀疑这是相关的。真的吗?我是否需要为我正在使用的这些“外部”类找到亚马逊类替代?我很困惑。

回答

6

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

+0

该链接正是我所需要的!谢谢! – user2917629

3

另一种选择是创建一个fat jar文件。这是一个已经包含所有依赖关系的jar。这样的文件将更大,但易于管理。我建议你使用一些构建工具,如Maven来构建一个胖罐子。

0

除了正常的依赖关系树以外,只需将依赖关系jar包含在dependencyManagement> dependencies> pom.xml中的依赖关系标记中即可。这也会造成脂肪罐。