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

JAXB2 Maven插件编译报错问题求助

解决Spring Boot 3.0.4中JAXB2编译错误问题

问题根源

你的编译错误核心是Spring Boot 3.x基于Jakarta EE 9+,但你使用的jaxb2-maven-plugin:2.4和部分JAXB依赖仍停留在Java EE的javax命名空间,两者完全不兼容。具体冲突点:

  • 旧版插件(2.4)不支持Jakarta EE的jakarta.xml.bind命名空间,无法解析原http://java.sun.com/xml/ns/jaxb的Schema(对应Jakarta版本为https://jakarta.ee/xml/ns/jaxb)
  • JAXB依赖版本混乱:同时混用了javax的jaxb-api:2.3.0、Jakarta的jaxb-impl:4.0.1和jaxb-xjc:3.0.0,版本与命名空间不匹配
  • 其他javax.transaction-api、activation等依赖也不符合Spring Boot 3的Jakarta规范

修复步骤

1. 替换所有javax依赖为Jakarta版本

删除原有javax命名空间的JAXB、事务、激活依赖,替换为Jakarta版本:

<!-- XML/JAXB 核心依赖 -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>4.0.1</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-xjc</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

<!-- 替换javax.transaction为Jakarta版本 -->
<dependency>
    <groupId>jakarta.transaction</groupId>
    <artifactId>jakarta.transaction-api</artifactId>
</dependency>

<!-- 替换javax.activation为Jakarta版本 -->
<dependency>
    <groupId>jakarta.activation</groupId>
    <artifactId>jakarta.activation-api</artifactId>
</dependency>

注:Spring Boot 3.0.4的parent已管理大部分Jakarta依赖的版本,无需手动指定;jaxb-impl和jaxb-xjc指定与API兼容的4.x版本即可

2. 更新jaxb2-maven-plugin到支持Jakarta的版本

将插件替换为3.x版本(支持Jakarta EE),并调整配置适配新Schema:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <!-- 使用支持Jakarta的3.x版本 -->
    <version>3.1.0</version>
    <executions>
        <execution>
            <id>xjc</id>
            <goals>
                <goal>xjc</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <packageName>fr.geomod.components.cmdecarte.basket.model.generated</packageName>
        <!-- 指定Jakarta规范的XML Schema类型 -->
        <schemaLanguage>XMLSCHEMA</schemaLanguage>
        <!-- 若有绑定文件,添加此配置(无绑定文件可忽略) -->
        <bindingDirectory>${project.basedir}/src/main/resources</bindingDirectory>
    </configuration>
    <dependencies>
        <!-- 强制插件使用Jakarta版本的JAXB API -->
        <dependency>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
            <version>4.0.1</version>
        </dependency>
    </dependencies>
</plugin>

3. 清理缓存并重新编译

执行以下Maven命令清除旧缓存,重新构建项目:

mvn clean install

额外注意事项

如果你的XSD文件中直接引用了JAXB Schema,需要同步替换命名空间:将http://java.sun.com/xml/ns/jaxb替换为https://jakarta.ee/xml/ns/jaxb。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:42:36