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

Quarkus 3.2.1.Final原生构建因javax.annotation依赖失败求助

解决Quarkus 3.2.1.Final构建原生镜像时javax.annotation.Priority未解析的问题

问题根源

Quarkus 3.x基于Jakarta EE 9+规范,使用jakarta.annotation包;而你依赖的moneta-core:1.4.2属于Java EE生态,依赖的是javax.annotation-api。两者包名不兼容,导致GraalVM构建原生镜像时,无法解析org.javamoney.moneta.spi.PriorityAwareServiceProvider中引用的javax.annotation.Priority类型。

可行解决办法

1. 升级moneta-core到Jakarta兼容版本

这是最彻底的解决方案,直接消除javax/jakarta的依赖冲突:
替换pom.xml中的moneta-core依赖为Jakarta迁移后的版本(2.2.0及以上):

<dependency>
    <groupId>org.javamoney.moneta</groupId>
    <artifactId>moneta-core</artifactId>
    <version>2.2.0</version>
</dependency>

新版本已完全迁移到Jakarta API,无需额外配置即可适配Quarkus 3.x。

2. 保留旧版moneta-core,通过依赖替换+原生配置兼容

如果无法升级moneta-core,可通过以下步骤处理:

  • 排除冲突依赖:在moneta-core依赖中排除javax.annotation-api:
    <dependency>
        <groupId>org.javamoney.moneta</groupId>
        <artifactId>moneta-core</artifactId>
        <version>1.4.2</version>
        <exclusions>
            <exclusion>
                <groupId>javax.annotation</groupId>
                <artifactId>javax.annotation-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  • 引入Jakarta替代依赖:添加Quarkus兼容的Jakarta Annotation API:
    <dependency>
        <groupId>jakarta.annotation</groupId>
        <artifactId>jakarta.annotation-api</artifactId>
        <version>2.1.1</version>
    </dependency>
    
  • 配置原生构建规则:在src/main/resources/application.properties中添加:
    # 注册相关类到GraalVM反射列表
    quarkus.native.reflect-config.include=org.javamoney.moneta.spi.PriorityAwareServiceProvider
    # 强制在构建时初始化Jakarta注解类
    quarkus.native.additional-build-args=--initialize-at-build-time=jakarta.annotation.Priority
    
    或者创建src/main/resources/META-INF/native-image/reflect-config.json文件,更精细地配置反射:
    [
        {
            "name": "org.javamoney.moneta.spi.PriorityAwareServiceProvider",
            "allDeclaredConstructors": true,
            "allPublicMethods": true
        },
        {
            "name": "jakarta.annotation.Priority",
            "allPublicConstructors": true
        }
    ]
    

3. 使用Quarkus依赖转换插件自动适配

通过Quarkus Maven插件的依赖转换功能,自动将javax包替换为jakarta包:
在pom.xml的build插件中添加配置:

<plugin>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-maven-plugin</artifactId>
    <version>3.2.1.Final</version>
    <executions>
        <execution>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <dependencyTransformation>
            <transformations>
                <transformation>
                    <groupId>javax.annotation</groupId>
                    <artifactId>javax.annotation-api</artifactId>
                    <targetGroupId>jakarta.annotation</targetGroupId>
                    <targetArtifactId>jakarta.annotation-api</targetArtifactId>
                    <targetVersion>2.1.1</targetVersion>
                </transformation>
            </transformations>
        </dependencyTransformation>
    </configuration>
</plugin>

验证

完成配置后,重新执行原生构建命令:

mvn clean verify -Dnative -Dquarkus.native.container-build=true

内容的提问来源于stack exchange,提问作者Skod

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:33:17