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

Java 17迁移Jakarta EE:mvn generate-sources生成javax而非jakarta类问题

问题原因与解决方案

你的核心问题是使用的maven-jaxb2-plugin版本(0.15.3)不支持Jakarta EE的命名空间。这个旧版插件默认基于javax.xml.bind生成代码,哪怕你项目里引入了Jakarta的JAXB API依赖,插件本身依然会用旧的javax路径生成注解导入。

解决步骤

1. 升级maven-jaxb2-plugin到支持Jakarta的版本

从插件的3.x版本开始,maven-jaxb2-plugin正式支持Jakarta EE 9+的jakarta命名空间。建议升级到最新的3.x稳定版(比如3.1.0),该版本适配JAXB 4.x与Java 17。

2. 调整插件配置,强制使用Jakarta绑定

修改pom.xml中的插件配置,确保插件依赖Jakarta版本的JAXB工具,并通过参数明确指定生成Jakarta注解:

<build>
    <plugins>
        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <!-- 升级到支持Jakarta的版本 -->
            <version>3.1.0</version>
            <dependencies>
                <!-- 明确指定插件使用Jakarta的JAXB API -->
                <dependency>
                    <groupId>jakarta.xml.bind</groupId>
                    <artifactId>jakarta.xml.bind-api</artifactId>
                    <version>4.0.0</version>
                </dependency>
                <!-- 引入Jakarta版本的XJC代码生成器 -->
                <dependency>
                    <groupId>org.glassfish.jaxb</groupId>
                    <artifactId>jaxb-xjc</artifactId>
                    <version>4.0.3</version>
                </dependency>
            </dependencies>
            <configuration>
                <!-- 强制生成Jakarta命名空间的注解 -->
                <args>
                    <arg>-Xjc-annotations=jakarta.xml.bind.annotation</arg>
                </args>
                <!-- 保留你原有的其他配置 -->
            </configuration>
        </plugin>
        <!-- 其他插件 -->
    </plugins>
</build>

3. 重新生成代码

执行以下命令清理并重新生成源码:

mvn clean generate-sources

验证结果

检查target/generated-sources下的类文件,此时导入语句应该变为:

import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;

额外注意事项

  • 确保项目中没有其他依赖引入javax.xml.bind:jaxb-api,避免依赖冲突。可以通过mvn dependency:tree命令排查是否存在旧版javax依赖。
  • JAXB 4.x要求Java 11+,与你的Java 17环境完全兼容,无需额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 15:45:38