AWS lambda JAVA:外部库的使用
上传并运行java.jar文件后,我得到一个警告和一个错误。 警告是: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
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
wheredeploy
任务,具体取决于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中吗?