我在使用micronaut和aws SDK-v2构建GraalVM本机映像时遇到了一个问题。在详细说明错误之前,我想要注意的是,在使用sdk-v2之前,本机映像是正确构建的。
一旦我更新到aws sdk-v2(通过micronaut依赖项as):
...
implementation "io.micronaut.aws:micronaut-aws-sdk-v2:2.0.2"
...
我在试图构建图像时出错了
Fatal error:java.lang.NoSuchMethodError
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:603)
at java.base/java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1006)
at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:480)
at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:349)
at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:508)
at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:114)
at com.oracle.svm.hosted.NativeImageGeneratorRunner$JDK9Plus.main(NativeImageGeneratorRunner.java:537)
Caused by: java.lang.NoSuchMethodError: 'void io.micronaut.core.graal.AutomaticFeatureUtils.initializeAtBuildTime(org.graalvm.nativeimage.hosted.Feature$BeforeAnalysisAccess, java.lang.String)'
at io.micronaut.aws.sdk.v2.graal.AwsSdkAutomaticFeature.beforeAnalysis(AwsSdkAutomaticFeature.java:41)
at com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$7(NativeImageGenerator.java:693)
at com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:70)
at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:693)
at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:555)
at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:468)
at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1407)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
Error: Image build request failed with exit status 1
com.oracle.svm.driver.NativeImage$NativeImageError: Image build request failed with exit status 1
at com.oracle.svm.driver.NativeImage.showError(NativeImage.java:1558)
at com.oracle.svm.driver.NativeImage.build(NativeImage.java:1308)
at com.oracle.svm.driver.NativeImage.performBuild(NativeImage.java:1269)
at com.oracle.svm.driver.NativeImage.main(NativeImage.java:1228)
at com.oracle.svm.driver.NativeImage$JDK9Plus.main(NativeImage.java:1740)
...
我的假设是micronaut一定在内部做了一些反思,这使得构建过程失败。我添加了以下json文件来设置反射配置
[
{
"name" : "io.micronaut.core.graal.AutomaticFeatureUtils",
"allDeclaredConstructors" : true,
"allPublicConstructors" : true,
"allDeclaredMethods" : true,
"allPublicMethods" : true
},
{
"name":"io.micronaut.core.graal.AutomaticFeatureUtils",
"methods":[{"name":"initializeAtBuildTime","parameterTypes":["org.graalvm.nativeimage.hosted.Feature$BeforeAnalysisAccess","java.lang.String[]"] }]
}
]
此错误与反射无关。
Feature和AutomaticFeature是GraalVM本机映像概念,允许对本机iamge进行编程配置,更多细节可以在Javadoc中找到,例如:https://github.com/oracle/graal/blob/master/sdk/src/org.GraalVM.nativeImage/src/org/GraalVM/nativeImage/hosted/Feature.java#l59
您显示的错误发生在图像生成期间,这是一个正常的java过程,不需要配置反射等,这些是运行时行为的配置。
错误说明awssdkautomaticfeature
(source尝试调用void io.micronaut.core.graal.automaticfeatureutils.initializeatBuildTime(org.graalvm.nativeImage.hosted.feature$beforeanalysisAccess,java.lang.string)
)但是没有这样的方法。
随着最新版本的Spring Boot,spall-graalvm-本机,GraalVM和相应的博客文章 https://spring.io/blog/2020/04/16/spring-tips-the-graalvm-native-image-builder-feature https://blog.codecentric.de/en/2020/05/spring-boot-graalvm 我还
我在GraalVm native-image(Micronaut框架)中遇到了MongoDB的问题。当我使用IDE和。jar进行部署时,所有工作都正常,没有任何异常。当我使用由Micronauts launcher生成的标准Gradle任务创建本机映像并试图从数据库中获取实体时,找不到。这是我的成绩。建造 下面是我的DroneService.class,我试图从MongoDB中获取实体 日志 有什
我在这里将Micronaut应用程序作为Graalvm本地映像进行试用。
我试图在micronaut服务中使用自定义外部库(aws lambda通过api网关与graalvm本机编译) 我的库中有几个类需要jackson在反序列化过程中使用。因此,我在一个单独的配置类中将我的类添加到注释中(如文档中所述)https://docs.micronaut.io/latest/guide/index.html#_use_the_code_introspected_code_an
如本指南所述,我使用的是命令生成包含graalvm本机映像的zip文件。我正面临此线程中描述的问题,因此希望通过将传递给我的命令来包含资源,如下所示: 不幸的是,它失败了。我怎么能把这个传递给gradle任务?
在哪里可以找到使用 -H:配置文件目录设置的 GraalVM 配置文件的文档/模式