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

启动Eureka Server先后报JAXB缺失、XStream模块访问异常问题

问题根因

两个连锁报错的核心原因是项目实际运行时使用的JDK版本并非你认为的Java 8,两个异常均为JDK 9及以上版本的典型兼容问题:

  • 初始抛出的java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present:JDK 9正式引入模块化系统后,JAXB相关组件被划分到独立的java.xml.bind模块,不再默认加入运行时类路径,Jersey组件加载时找不到JAXBContext类就会触发该异常,该异常在标准Java 8环境下不会出现。
  • 添加JAXB依赖后抛出的java.lang.reflect.InaccessibleObjectException:是JDK 9+对核心模块做强封装的直接表现,高版本JDK默认禁止未命名模块通过反射访问java.util等核心包下类的私有成员,老版本XStream反射操作TreeMap的私有comparator字段时就会被拦截,最终导致Tomcat启动失败,这个异常在Java 8环境下没有触发条件。
    你下载讲师提供的可运行示例仍然复现问题,也能佐证问题出在本地运行环境配置,而非项目代码、依赖配置本身。
修复步骤
  • 优先校准JDK版本配置,不要仅通过全局java -version命令判断版本,以项目启动日志首行打印的实际Java版本为准,逐一排查以下配置项:
    • IDE中Project Structure的项目SDK、语言级别是否选择为JDK 8
    • 项目启动配置(Run/Debug Configurations)中绑定的JRE是否为JDK 8
    • 若通过Maven命令启动,执行mvn -v查看Maven实际依赖的JDK版本,确认指向JDK 8
    • 检查系统环境变量JAVA_HOME、Path配置,排除高版本JDK路径优先级更高导致启动时调用错误版本的情况
  • 如果你确实需要使用JDK 9及以上版本运行项目,可选择以下任意一种方案修复:
    1. 升级Spring Cloud版本到Greenwich SR2及以上,该版本之后的Eureka Server组件已经完成高版本JDK适配,会自动引入兼容JDK 9+的JAXB、XStream依赖,不需要手动添加JAXB相关包
    2. 若暂时无法升级依赖,保留你之前添加的JAXB相关Maven依赖,在项目启动的JVM参数中添加以下配置开放模块反射权限:
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/java.lang=ALL-UNNAMED

注:如果校准JDK到Java 8后仍然出现JAXB类找不到的异常,检查是否引入了错误的servlet或者Eureka依赖排除了JAXB相关包,正常Java 8环境下不需要手动添加JAXB依赖即可启动Eureka Server。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:18:16