You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GluonFX构建Windows原生镜像时ImageSingletons重复添加报错

解决GraalVM + GluonFX构建Windows原生镜像时的ImageSingletons冲突报错

针对你遇到的ImageSingletons.add必须不能覆盖已存在的键com.oracle.svm.core.jdk.ProtectionDomainSupport报错,结合你的版本信息(GraalVM 22.1.0.1、GluonFX 1.0.21/22),可以按以下步骤排查解决:

1. 排查并解决依赖冲突

这个报错本质是构建时重复注册了Substrate VM的单例类,大概率是项目依赖中存在重复或版本不匹配的GraalVM相关模块:

  • 执行Maven命令查看依赖树:
    mvn dependency:tree
    
  • 找出所有包含org.graalvm.nativeimage或com.oracle.svm的依赖,检查是否有多个依赖引入了相同模块,或者版本与你使用的GraalVM 22.1.0.1不一致。
  • 在pom.xml中排除冲突的依赖,示例:
    <dependency>
        <groupId>第三方库groupId</groupId>
        <artifactId>第三方库artifactId</artifactId>
        <version>版本号</version>
        <exclusions>
            <exclusion>
                <groupId>org.graalvm.nativeimage</groupId>
                <artifactId>native-image</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.oracle.svm</groupId>
                <artifactId>svm</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

2. 确保版本兼容并清理缓存

  • 确认你使用的GraalVM版本与GluonFX版本匹配:GraalVM 22.1.0.1推荐搭配GluonFX 1.0.20及以上版本,你尝试的1.0.22是兼容的,但可能本地缓存存在旧版本残留。
  • 执行以下命令清理Maven缓存和GluonFX构建缓存:
    mvn clean install -U
    mvn gluonfx:clean
    
  • 若本地仓库存在损坏的依赖,可手动删除~/.m2/repository/org/gluonhq和~/.m2/repository/com/oracle/svm目录后重新构建。

3. 统一Java版本环境

  • 确保项目的Java编译版本与GraalVM的Java版本一致:GraalVM 22.1.0.1有Java 11和Java 17两个分支,若项目用Java 11,必须对应使用GraalVM for Java 11版本,反之亦然。
  • 检查Windows环境变量:确认GRAALVM_HOME指向正确的GraalVM目录,且PATH中GraalVM的bin目录优先级高于系统其他JDK的bin目录。

4. 处理反射配置警告

虽然反射警告不直接导致当前报错,但未正确配置反射可能引发其他构建或运行问题:

  • 在OpenJDK环境下启动应用并生成反射配置:
    java -agentlib:native-image-agent=config-output-dir=./src/main/resources/META-INF/native-image 你的主类全路径
    
  • 运行过程中触发应用所有核心功能(确保所有需要反射的操作都被执行),agent会自动生成reflect-config.json、resource-config.json等配置文件到指定目录。
  • 重新执行GluonFX构建命令,反射警告会显著减少。

5. 检查GluonFX插件配置

确保pom.xml中的GluonFX插件配置正确,示例:

<build>
    <plugins>
        <plugin>
            <groupId>com.gluonhq</groupId>
            <artifactId>gluonfx-maven-plugin</artifactId>
            <version>1.0.22</version>
            <configuration>
                <mainClass>com.yourpackage.YourMainClass</mainClass>
                <!-- 若自动检测失败,手动指定GraalVM路径 -->
                <!-- <graalvmHome>C:\Program Files\GraalVM\graalvm-ce-java17-22.1.0.1</graalvmHome> -->
            </configuration>
        </plugin>
    </plugins>
</build>

内容的提问来源于stack exchange,提问作者Zeb-ur-Rehman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:52:01