升级至Jakarta EE时Jackson-Module-Jaxb-Annotation抛出异常
问题原因及解决办法
根本原因
你用错了Jackson对应Jakarta EE的JAXB模块artifactId。jackson-module-jaxb-annotations是专门适配旧JEE(javax命名空间)的版本,即便升级到2.17.1,它依然会依赖并调用javax.xml.bind相关类;而适配Jakarta EE的模块有单独的artifactId:jackson-module-jakarta-xmlbind-annotations。
解决步骤
替换Jackson JAXB模块依赖
在Maven的pom.xml中,移除原有的jackson-module-jaxb-annotations依赖,替换为Jakarta版本:<dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jakarta-xmlbind-annotations</artifactId> <version>2.17.1</version> </dependency>清理并确认依赖
- 运行
mvn dependency:tree检查依赖树,确保没有javax.xml.bind:jaxb-api这类旧依赖被引入。如果有,在对应依赖中添加排除规则:<exclusion> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> </exclusion> - 确认
jakarta.xml.bind:jakarta.xml.bind-api(你用的4.0.2版本)是唯一的JAXB API依赖。
- 运行
修正代码中的导入
检查项目代码里的import语句,将所有javax.xml.bind.*替换为jakarta.xml.bind.*,比如:- 替换
import javax.xml.bind.annotation.XmlRootElement;为import jakarta.xml.bind.annotation.XmlRootElement;
- 替换
服务器环境适配(如果使用应用服务器)
如果你部署在WildFly、TomEE等服务器上,确保使用的是支持Jakarta EE的服务器版本(比如WildFly 27+、TomEE 9+),避免服务器自带的旧JEE类库干扰应用的类加载。
内容的提问来源于stack exchange,提问作者Michael Stirling
相关产品推荐
相关产品推荐

