把jdk1.8升级为jdk17后项目启动不了.....

文章讲述了在使用Spring框架时遇到CGLIB库的`InaccessibleObjectException`,原因是类加载器权限问题。解决方案包括在VMoptions中添加`--add-opens`选项以及引入javassist依赖来处理类访问权限问题。
摘要由CSDN通过智能技术生成

报错:

Caused by: org.springframework.cglib.core.CodeGenerationException: 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 @2ddc9a9f
at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:464)
at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:336)
at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData 3. a p p l y ( A b s t r a c t C l a s s G e n e r a t o r . j a v a : 93 ) a t o r g . s p r i n g f r a m e w o r k . c g l i b . c o r e . A b s t r a c t C l a s s G e n e r a t o r 3.apply(AbstractClassGenerator.java:93) at org.springframework.cglib.core.AbstractClassGenerator 3.apply(AbstractClassGenerator.java:93)atorg.springframework.cglib.core.AbstractClassGeneratorClassLoaderData$3.apply(AbstractClassGenerator.java:91)
at org.springframework.cglib.core.internal.LoadingCache 2. c a l l ( L o a d i n g C a c h e . j a v a : 54 ) a t j a v a . b a s e / j a v a . u t i l . c o n c u r r e n t . F u t u r e T a s k . r u n 2.call(LoadingCache.java:54) at java.base/java.util.concurrent.FutureTask.run 2.call(LoadingCache.java:54)atjava.base/java.util.concurrent.FutureTask.run$ c a p t u r e ( F u t u r e T a s k . j a v a : 264 ) a t j a v a . b a s e / j a v a . u t i l . c o n c u r r e n t . F u t u r e T a s k . r u n ( F u t u r e T a s k . j a v a ) a t o r g . s p r i n g f r a m e w o r k . c g l i b . c o r e . i n t e r n a l . L o a d i n g C a c h e . c r e a t e E n t r y ( L o a d i n g C a c h e . j a v a : 61 ) a t o r g . s p r i n g f r a m e w o r k . c g l i b . c o r e . i n t e r n a l . L o a d i n g C a c h e . g e t ( L o a d i n g C a c h e . j a v a : 34 ) a t o r g . s p r i n g f r a m e w o r k . c g l i b . c o r e . A b s t r a c t C l a s s G e n e r a t o r capture(FutureTask.java:264) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) at org.springframework.cglib.core.AbstractClassGenerator capture(FutureTask.java:264)atjava.base/java.util.concurrent.FutureTask.run(FutureTask.java)atorg.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61)atorg.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34)atorg.springframework.cglib.core.AbstractClassGeneratorClassLoaderData.get(AbstractClassGenerator.java:116)
at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:291)
at org.springframework.cglib.core.KeyFactory$Generator.create(KeyFactory.java:221)
at org.springframework.cglib.core.KeyFactory.create(KeyFactory.java:174)
at org.springframework.cglib.core.KeyFactory.create(KeyFactory.java:153)
at org.springframework.cglib.proxy.Enhancer.(Enhancer.java:73)
… 26 common frames omitted
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 @2ddc9a9f
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
at org.springframework.cglib.core.ReflectUtils 1. r u n ( R e f l e c t U t i l s . j a v a : 61 ) a t j a v a . b a s e / j a v a . s e c u r i t y . A c c e s s C o n t r o l l e r . d o P r i v i l e g e d ( A c c e s s C o n t r o l l e r . j a v a : 569 ) a t o r g . s p r i n g f r a m e w o r k . c g l i b . c o r e . R e f l e c t U t i l s . < c l i n i t > ( R e f l e c t U t i l s . j a v a : 52 ) a t o r g . s p r i n g f r a m e w o r k . c g l i b . c o r e . K e y F a c t o r y 1.run(ReflectUtils.java:61) at java.base/java.security.AccessController.doPrivileged(AccessController.java:569) at org.springframework.cglib.core.ReflectUtils.<clinit>(ReflectUtils.java:52) at org.springframework.cglib.core.KeyFactory 1.run(ReflectUtils.java:61)atjava.base/java.security.AccessController.doPrivileged(AccessController.java:569)atorg.springframework.cglib.core.ReflectUtils.<clinit>(ReflectUtils.java:52)atorg.springframework.cglib.core.KeyFactoryGenerator.generateClass(KeyFactory.java:243)
at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:329)
… 39 common frames omitted

解决方案:

在VM options里面添加下面内容
–add-opens=java.base/java.lang=ALL-UNNAMED

但仍然有问题:

在这里插入图片描述

解决方法:

添加依赖

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.27.0-GA</version>
</dependency>
  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值