[英]Quarkus GraalVM native build fails in AWS Lambda with ClassNotFoundException
我想用 quarkus 创建一个 java 项目,并想使用 GraalVm 进行提前编译以降低 AWS lambda 中的冷启动时间。
当我在 AWS Lambda 中部署它并运行测试时,我收到以下错误:
Class not found: de.timguy.lambda.GreetingLambda: java.lang.ClassNotFoundException
java.lang.ClassNotFoundException: de.timguy.lambda.GreetingLambda. Current classpath: file:/var/task/
我采取的步骤
创建项目: https ://code.quarkus.io/?g=de.timguy&a=quark2&b=GRADLE&e=io.quarkiverse.amazonalexa%3Aquarkus-amazon-alexa&e=amazon-lambda&extension-search=lambda
gradlew build -Dquarkus.package.type=native -Dquarkus.native.container-build=true
Version info: GraalVM 22.0.0.2 Java 11 CE 3 user-provided feature(s) - io.quarkus.runner.AutoFeature - io.quarkus.runtime.graal.DisableLoggingAutoFeature - io.quarkus.runtime.graal.ResourcesFeature Produced artifacts: /project/quark2-1.0.0-SNAPSHOT-runner (executable) /project/quark2-1.0.0-SNAPSHOT-runner.build_artifacts.txt Finished generating 'quark2-1.0.0-SNAPSHOT-runner' in 11m 54s. BUILD SUCCESSFUL in 12m 52s
当 Quarkus 以 AWS Lambda 为目标时,它将生成一个特殊的 zip 文件。 如果你打开它,你会看到一个引导文件。 引导文件仅用于自定义运行时。 自定义运行时知道在启动时执行该操作。
如果您错误地将本机可执行文件部署到 Java 管理的运行时,那么 JVM 将无法找到您的处理程序方法,因为它不是类路径上的类,而是本机可执行文件。
Quarkus 知道如何以这种方式打包您的 Lambda 函数,因为您使用了 amazon-lambda 扩展。
我选择了错误的运行时设置:
(仍然好奇:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.