欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > module java.base does not “opens java.lang“ to unnamed module

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

2024/10/24 15:14:27 来源:https://blog.csdn.net/xch_yang/article/details/140039181  浏览:    关键词: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 @7744eae3at 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包中的类型。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com