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

Spring Parent 2.7.18迁3.1.10(Java17)遇JAXB类缺失错误

Spring Boot 3.1.10迁移(Java17)解决JAXBRIContext找不到的问题

问题核心

从Spring Parent 2.7.18升级到3.1.10(Java17)后出现的NoClassDefFoundError: com/sun/xml/bind/api/JAXBRIContext,本质是Spring Boot 3.x全面切换到Jakarta EE API,替代了旧的Java EE(javax.*)API,你尝试的依赖中混合了新旧版本的JAXB/JAX-WS依赖,导致类路径冲突或缺失。

解决方案

1. 清理冲突依赖

先彻底移除pom.xml中所有以下类型的依赖:

  • javax.xml.bind:jaxb-api(旧Java EE版本)
  • javax.jws:javax.jws-api
  • javax.xml:jaxrpc-api
  • com.sun.xml.ws:rt:2.3.1(旧Java EE版本的JAX-WS实现)

这些依赖基于javax命名空间,和Spring Boot 3.x的Jakarta环境完全不兼容,必须删掉。

2. 添加兼容的Jakarta版本依赖

在pom.xml中添加以下适配Jakarta EE的依赖(优先用Spring Parent管理的版本,避免硬写版本号):

<!-- Jakarta JAXB API(Spring Parent已管理对应版本) -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
</dependency>

<!-- JAXB RI 运行时实现(Jakarta版本) -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <scope>runtime</scope>
</dependency>

<!-- 如果项目用到JAX-WS(WebService),添加Jakarta版本的实现 -->
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>4.0.2</version> <!-- 适配Jakarta EE 9+的稳定版本 -->
</dependency>

3. 验证依赖一致性

执行mvn dependency:tree命令,检查是否还有残留的javax.xml.bind相关依赖,如果有,通过<exclusions>排除掉冲突的依赖。

为什么之前的尝试无效?

你之前添加的javax.xml.bind:jaxb-api和com.sun.xml.ws:rt:2.3.1都是旧Java EE体系的依赖,和Spring Boot 3.x要求的Jakarta API(jakarta.*命名空间)冲突,导致类加载时找不到正确的JAXBRIContext类(该类在Jakarta版本的jaxb-impl中才会被正确加载)。

内容的提问来源于stack exchange,提问作者Rajendra Desale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:57:15