module java.base does not “opens java.lang“ to unnamed module

SpringBoot项目运行报如下错误

Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @7744eae3
	at java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:388) ~[na:na]
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:364) ~[na:na]
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:312) ~[na:na]
	at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:203) ~[na:na]
	at java.base/java.lang.reflect.Method.setAccessible(Method.java:197) ~[na:na]
	at org.springframework.cglib.core.ReflectUtils$1.run(ReflectUtils.java:61) ~[spring-core-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:571) ~[na:na]
	at org.springframework.cglib.core.ReflectUtils.<clinit>(ReflectUtils.java:52) ~[spring-core-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:243) ~[spring-core-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) ~[spring-core-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:329) ~[spring-core-5.0.9.RELEASE.jar:5.0.9.RELEASE]
	... 31 common frames omitted

在这里插入图片描述

原因:

在Java 9及以后的版本中,模块系统增加了对反射访问的控制,以确保Java平台的稳定性和安全性。默认情况下,Java的核心模块(如java.base)不允许被其他模块反射访问。


解决方法:

方法一:

直接更换项目jdk版本到8即可,简单粗暴

在这里插入图片描述


方法二:

如果你正在编写的代码属于一个模块,并且需要反射访问java.lang包中的类,你可以在模块的module-info.java文件中添加以下声明:

opens java.lang;

这将允许反射访问java.lang包中所有的类型。

如果你不需要反射访问java.lang包中的所有类型,而只是某些特定的类型,你可以只开放那些特定的类型:

opens java.lang to your.module.name;
//your.module.name为你的模块名。

方法三:

如果你不能修改module-info.java文件(比如使用的是第三方库),那么你可能需要寻找替代方法来实现你的需求,而不是使用反射来访问java.lang包中的类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大佬超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值