java - Graal VM 构建错误 : java. lang.NullPointerException:无法调用 "java.util.Set.iterator()",因为 "triggers"为 null

标签 java spring-boot graalvm spring-native

为我的 Spring boot 项目运行 native graal 构建(迁移到 Graal VM)时出现以下错误。我在任何地方都找不到这个问题的任何有效答案。请求社区提供帮助。

java.lang.NullPointerException: Cannot invoke "java.util.Set.iterator()" because "triggers" is null
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.ReachabilityHandlerFeature.processReachable(ReachabilityHandlerFeature.java:173)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.ReachabilityHandlerFeature.duringAnalysis(ReachabilityHandlerFeature.java:128)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$10(NativeImageGenerator.java:770)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:86)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$11(NativeImageGenerator.java:770)
    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.AbstractAnalysisEngine.runAnalysis(AbstractAnalysisEngine.java:179)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:767)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:582)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:539)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:408)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:612)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.start(NativeImageGeneratorRunner.java:134)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:94)

Spring Boot 版本:3.1.1 JDK:Graal 虚拟机、JDK 17 平台:MacOS(M2、Aarch64)

<plugin>
                <groupId>org.graalvm.buildtools</groupId>
                <artifactId>native-maven-plugin</artifactId>
                <extensions>true</extensions>
                <executions>
                    <execution>
                        <id>build-native</id>
                        <goals>
                            <goal>compile-no-fork</goal>
                        </goals>
                        <phase>package</phase>
                    </execution>
                    <execution>
                        <id>test-native</id>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <phase>test</phase>
                    </execution>
                </executions>
                <configuration>
                    <fallback>false</fallback>
                    <buildArgs>
                        <arg>
                            --verbose
                            -Dspring.aot.enabled=true
                            -H:TraceClassInitialization=true
                            -H:+ReportExceptionStackTraces
                            -H:Name=trace-app
                            -H:DashboardDump=trace-app
                            -H:+DashboardAll
                            -H:Class=com.xxx.trace.TraceApplication
                            --initialize-at-build-time=org.slf4j.LoggerFactory,ch.qos.logback,org.slf4j.MDC,org.slf4j.impl.StaticLoggerBinder
                            --initialize-at-run-time=io.netty
                            -Dspring.graal.remove-unused-autoconfig=true
                            -Dspring.graal.remove-yaml-support=true
                        </arg>
                    </buildArgs>
                    <agent>
                        <enabled>true</enabled>
                        <defaultMode>Standard</defaultMode>
                        <options>
                            <trackReflectionMetadata>true</trackReflectionMetadata>
                        </options>
                        <metadataCopy>
                            <disabledStages>
                                <stage>test</stage>
                            </disabledStages>
                            <merge>true</merge>
                            <outputDirectory>/tmp/test-output-dir</outputDirectory>
                        </metadataCopy>
                    </agent>
                </configuration>
            </plugin>

最佳答案

这是 Graal 22.x native 镜像生成器中/的已知错误;请参阅https://github.com/oracle/graal/issues/5868 .

在撰写本文时,尚无可用的修复方法。但是,您也许可以根据问题的对应关系找出解决方法。

显然,该错误与 Graal 版本 22 中添加的新 RunReachabilityHandlersConcurrently 选项有关。一种可能的解决方法是使用旧版本的 Graal。另一个是找出正在使用新选项的内容并更改它......就像他们根据 https://github.com/googleapis/gax-java/pull/1815googleapis/gax-java 所做的那样.

关于java - Graal VM 构建错误 : java. lang.NullPointerException:无法调用 "java.util.Set.iterator()",因为 "triggers"为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76752710/

相关文章:

spring - 如何在 Spring 应用程序的 servlet 过滤器中 Autowiring bean?

Spring Boot RestEndpoint 重定向到 Angular 路由

javascript - GraalVM JS : How I do pass Truffle options via Bindings (Nashorn compat mode) and Context in a Java application?

JavaBeanExecutable HV000254 缺少 Java 枚举的参数元数据

haskell - 如何在 GraalVM 上运行 Haskell?

java - 'java.util.ArrayList' 未经检查的分配

java - 如何从我的 Android 设备中发现 UUID?

java - 在 web 应用上下文中导入时,在 jar 文件中配置的 PersistenceUnit 具有错误的 PersistenceUnitRootLocation URL

java - 使用 Jooq 设置字符数组而不是字符串

java - JIT 编译代码存放在哪里?