Spring Boot 2.6.10与3.1.5差异咨询:Maven项目缺失javax包
Spring Boot 3.1.5 升级后 javax.xml.bind.annotation 缺失问题解决
问题原因
Spring Boot 3.x 基于 Jakarta EE 9+ 构建,而 2.x 版本基于传统 Java EE。两者核心差异在于 Java EE 的 javax.* 命名空间被全面迁移至 jakarta.*,Tomcat 也随之从 9.x(兼容 Java EE)升级到 10.1.x(仅兼容 Jakarta EE),因此 3.1.5 版本的 tomcat-embed-core 不再包含任何 javax 开头的 API。
解决方案
1. 迁移代码至 Jakarta API
如果你的项目代码直接使用了 javax.xml.bind.annotation 下的注解(如 @XmlElement、@XmlRootElement 等),需要将所有相关引用替换为 jakarta.xml.bind.annotation 下的对应类:
- 原:
import javax.xml.bind.annotation.XmlElement; - 替换为:
import jakarta.xml.bind.annotation.XmlElement;
2. 兼容第三方依赖(无法修改源码时)
如果是项目依赖的第三方库仍在使用 javax.xml.bind API,可添加 Jakarta XML Binding 的运行时依赖来提供兼容支持,在 pom.xml 中加入:
<dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <scope>runtime</scope> </dependency>
或者添加 API 规范与实现的组合依赖:
<dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.moxy</artifactId> <scope>runtime</scope> </dependency>
内容的提问来源于stack exchange,提问作者user20297975
相关产品推荐
相关产品推荐

