gpt4 book ai didi

java - 使用库运行 AWS lambda 函数时出现 NoClassDefFoundError

转载 作者:搜寻专家 更新时间:2023-11-01 03:33:05 24 4
gpt4 key购买 nike

我们正在开发一个项目来使用由 API 网关请求触发的 lambda 函数来处理文件。然后该函数获取 S3 存储桶中的文件并开始读取它。到目前为止,一切都按预期进行,但是当文件读取开始时,我们收到以下错误:

(...)
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.101-3.b13.24.amzn1.x86_64/jre/lib/rt.jar: error reading zip file
2017-02-06 19:15:06 <9025af71-eca0-11e6-82d2-9ff4b9184005> ERROR JRestlessHandlerContainer:339 - container failure
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.101-3.b13.24.amzn1.x86_64/jre/lib/rt.jar: error reading zip file
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.101-3.b13.24.amzn1.x86_64/jre/lib/rt.jar: error reading zip file
END RequestId: (some id)
REPORT RequestId: (some id) Duration: 3047.44 ms Billed Duration: 3100 ms Memory Size: 1536 MB Max Memory Used: 94 MB

Exception in thread "main" java.lang.Error: java.lang.NoClassDefFoundError: java/lang/Throwable$WrappedPrintWriter
at lambdainternal.AWSLambda.<clinit>(AWSLambda.java:59)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at lambdainternal.LambdaRTEntry.main(LambdaRTEntry.java:94)
Caused by: java.lang.NoClassDefFoundError: java/lang/Throwable$WrappedPrintWriter
at java.lang.Throwable.printStackTrace(Throwable.java:721)
at lambdainternal.UserFault.trace(UserFault.java:43)
at lambdainternal.UserFault.makeUserFault(UserFault.java:26)
at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:290)
at lambdainternal.AWSLambda.<clinit>(AWSLambda.java:57)
... 3 more
START RequestId: (some id) Version: $LATEST
END RequestId: (some id)

我们使用自己的自定义文件读取/处理库(一个 Java 项目),因为该文件也是根据我们的需要定制的,我们使用 Maven 将其添加到我们的项目中。我们的 lambda jar 是使用 Maven Shade 插件生成的:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>

在本地测试项目,运行正常,可以获取到文件信息。我们的代码使用 JAX-RS 和 Spring 来处理 API 网关(我们不确定这是否会影响结果)。但是,直到现在我们无法解决使用 lambda 运行项目时的这个问题。在我们的测试过程中,我们故意增加了函数超时和内存,但无论限制是多少,错误仍然存​​在。

提前谢谢你。

最佳答案

使用日志技术、调试我们的代码并联系 AWS 支持,我们发现我们的一个库正在禁止目录中创建文件,如下所述:https://aws.amazon.com/lambda/faqs/ ,所以 Lambda 函数失败了。

他们解释说如果你需要创建文件,你必须使用/tmp 目录,我们直到遇到这个问题才注意到这一点。我们一遍又一遍地阅读文档,但我认为这件事仍然让我们着迷,它确实发生了。无论如何,在库中更改此功能后,该函数现在可以按预期完美执行。

谢谢大家的帮助。

关于java - 使用库运行 AWS lambda 函数时出现 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42330427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com