【问题标题】:AWS Lambda JAVA: usage of external librariesAWS Lambda JAVA:外部库的使用
【发布时间】:2017-05-16 04:30:19
【问题描述】:

上传并运行我的 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.xml 中。我有一些我正在使用的库,比如 org.json 也会抛出相同的 java.lang.NoClassDefFoundError 错误。我确实导入了这些类。然而,我的 jar 不包含这些文件,只有我的类。我怀疑这有关系。真的吗?我是否需要为我正在使用的这些“外部”类找到亚马逊类替换?我糊涂了。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 以上指令链接已失效。可以关注这个new link
    【解决方案2】:

    另一种选择是创建一个胖 jar 文件。那是一个已经包含所有依赖项的 jar。这样的文件部署起来会更大,但更容易管理。我会建议你使用一些构建工具,如Maven 来构建一个胖罐子。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        例如。 ./gradlew shadowJar

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

        我在我的项目build.gradle 脚本中做了一个简单的任务来帮助我解决这个问题:

        task deployF() {
            group = 'serveless'
            dependsOn = ['shadowJar']
            def functionName = project.findProperty("fun")
            doLast {
                exec {
                    commandLine 'serverless', 'deploy', '-f', functionName
                }
            }
        }
        

        要使用它,您需要致电./gradle deployF -Pfun=YOUR_FUNCTION_NAME 这将构建 jar 文件并将所选函数部署到 lambda

        【讨论】:

        • 我可以使用 apache poi 将文档数据库结果导出到 aws lamdas 中的 csv 吗?
        猜你喜欢
        • 2018-09-16
        • 2021-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 2017-12-24
        • 2022-10-23
        • 2017-11-03
        相关资源
        最近更新 更多