Spring Boot 2.0 Java示例代码运行失败,java.base模块权限不足报错
问题根因
该错误是Spring Boot版本与本地JDK版本不兼容导致的:你当前使用的Spring Boot 2.0.0.RELEASE内置的Spring Framework 5.0.x版本仅原生支持Java 8,而你本地运行环境是Java 9及以上版本,Java 9引入的JPMS模块系统限制了反射访问权限,导致CGLIB动态生成类时无法调用ClassLoader的defineClass方法。
两种可行解决方案
方案一(推荐,长期适配):升级Spring Boot版本
将项目的Spring Boot版本升级到2.4.x及以上稳定版本,对应内置的Spring Framework 5.3.x+原生适配Java 9及以上版本的模块系统,无需额外配置即可正常运行。
- Maven项目修改pom.xml父依赖版本:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.15</version> <relativePath/> </parent>
- Gradle项目修改build.gradle插件版本:
plugins { id 'org.springframework.boot' version '2.7.15' id 'io.spring.dependency-management' version '1.0.15.RELEASE' id 'java' }
方案二(临时兼容,不改依赖版本):添加JVM启动参数
如果暂时不需要升级Spring Boot版本,可以给项目添加JVM启动参数,手动开放java.lang包的访问权限:
--add-opens java.base/java.lang=ALL-UNNAMED
不同IDE配置入口:
- IDEA:右上角运行配置 -> Modify options -> Add VM options -> 粘贴上述参数后保存
- Eclipse:运行配置 -> Arguments -> VM arguments栏添加上述参数
配置完成后重新启动项目即可正常运行。
内容的提问来源于stack exchange,提问作者devxpe
相关产品推荐
相关产品推荐

