项目导入seata配置后发生如下报错
根本原因是 InaccessibleObjectException
,这个异常表明程序试图通过反射访问一个被Java模块系统(introduced in Java 9)保护的类或方法,即java.lang.ClassLoader.defineClass
,但由于模块限制,该访问被拒绝。这是因为从Java 9开始,Java模块系统对反射操作进行了更严格的限制。具体到这个错误,cglib
库试图通过反射访问ClassLoader
的defineClass
方法,但由于Java模块系统的保护,无法直接访问
解决方案1::
切换JDK版本
A
切换现有的JDK版本到11
解决方案2:
在pom.xml
的<configuration>
中添加JVM参数:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>--add-opens=java.base/java.lang=ALL-UNNAMED</jvmArguments>
</configuration>
</plugin>
再在你的应用启动命令或配置中加入以下JVM选项,以开放java.lang
模块供反射使用 :
没有JVM选项,点击modify
添加虚拟机选项
在添加完成的选项中添加下面的代码:
--add-opens java.base/java.lang=ALL-UNNAMED
如下:
配置完运行即可:
可以发现seata已经成功加载!