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

Java17下Spring Boot OAuth2资源服务器启动报defineClass空指针错误如何解决

问题原因
  • 核心冲突为JAXB版本与Java 17的兼容性问题:Java 9及以上版本将原本内置的JAXB组件从JDK默认包中移除,你使用的Spring Boot 2.5.6内置的旧版本JAXB实现依赖反射访问JDK内部的defineClass方法完成类注入,而Java 17新增了强封装限制,禁止非法反射访问JDK内部API,直接导致该方法初始化失败为空,触发空指针异常。
  • 附加版本适配缺陷:Spring Boot 2.5.x系列未正式支持Java 17,官方对Java 17的兼容支持从Spring Boot 2.6.x版本才开始提供,旧版本的Spring Security OAuth2相关依赖在Java 17环境下运行本身也存在兼容性问题。
解决方案

方案一:升级Spring Boot版本(推荐)

将spring-boot-starter-parent版本升级到2.6.14及以上的2.6.x稳定版,同步将spring-cloud-dependencies版本升级到2021.0.x对应适配版本即可。Spring Boot 2.6.x官方已原生支持Java 17,且内置了兼容Java 17的JAXB相关依赖,无需额外修改其他配置即可解决该问题。

方案二:保留现有版本手动修复

如果暂时无法升级Spring Boot版本,可按以下步骤修改配置:

  1. 在项目pom.xml中引入兼容Java 17的JAXB依赖:
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.7</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>2.3.3</version>
</dependency>
  1. 在JVM启动参数中添加反射访问权限,启动应用时追加以下参数:
--add-opens java.base/java.lang=ALL-UNNAMED

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:54:11