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
相关产品推荐
相关产品推荐

