Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AWS lambda JAVA:外部库的使用_Java_Amazon Web Services_Aws Lambda - Fatal编程技术网

AWS lambda JAVA:外部库的使用

AWS lambda JAVA:外部库的使用,java,amazon-web-services,aws-lambda,Java,Amazon Web Services,Aws Lambda,上传并运行java.jar文件后,我得到一个警告和一个错误。 警告是: 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

上传并运行java.jar文件后,我得到一个警告和一个错误。 警告是:

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)   

我可以构建jar没有问题,所有的依赖项都在pom中。我使用了一些库,比如org.json,它们也会抛出相同的java.lang.NoClassDefFoundError错误。我确实导入了这些类。然而,我的jar不包含这些文件,只包含我的类。我怀疑这是有关系的。这是真的吗?我是否需要找到amazon类替换我正在使用的这些“外部”类?我很困惑

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

另一个选项是创建fat jar文件。这是一个已经包含所有依赖项的jar。这样的文件将更易于部署,但更易于管理。我建议您使用一些构建工具来构建胖jar。

除了普通的依赖项树之外,只需在pom.xml中的dependencyManagement>dependencies>dependency标记中包含依赖项jar即可。这也将创建胖jar。

回答这个问题可能有点晚,但如果您使用的是
Gradle
,则需要运行
shadowJar
任务,该任务将生成一个包含所有必需依赖项的胖jar

例如
/gradlew shadowJar

或者,如果您使用
serverless
,您可以使用
/gradlew deploy
where
deploy
任务,具体取决于
shadowJar
,它将部署整个堆栈

我在我的项目
build.gradle
script中做了一个简单的任务来帮助我:

task deployF() {
    group = 'serveless'
    dependsOn = ['shadowJar']
    def functionName = project.findProperty("fun")
    doLast {
        exec {
            commandLine 'serverless', 'deploy', '-f', functionName
        }
    }
}
要使用它,您需要调用
/gradle deployF-Pfun=YOUR\u FUNCTION\u NAME

这将构建jar文件并将所选函数部署到lambda

我可以使用apache poi将文档数据库结果导出到aws lamdas中的csv中吗?