我正在尝试建立一个模块化的spring应用程序。我有一个非常基本的,由start.spring.io生成的。我所做的只是添加了module-info.java文件,如下所示:
open module modules {
requires spring.boot;
requires spring.boot.autoconfigure;
requires spring.beans;
requires spring.context;
}它编译,在IntelliJ中没有显示错误。当我运行它时,它会抛出异常。控制台如下所示:
java.lang.IllegalStateException: Unable to load cache item
at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:79) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:134) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:319) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:572) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:419) ~[spring-core-5.3.23.jar:5.3.23]
at spring.context@5.3.23/org.springframework.context.annotation.ConfigurationClassEnhancer.createClass(ConfigurationClassEnhancer.java:137) ~[spring-context-5.3.23.jar:na]
at spring.context@5.3.23/org.springframework.context.annotation.ConfigurationClassEnhancer.enhance(ConfigurationClassEnhancer.java:109) ~[spring-context-5.3.23.jar:na]
at spring.context@5.3.23/org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:447) ~[spring-context-5.3.23.jar:na]
at spring.context@5.3.23/org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:268) ~[spring-context-5.3.23.jar:na]
at spring.context@5.3.23/org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:325) ~[spring-context-5.3.23.jar:na]
at spring.context@5.3.23/org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:147) ~[spring-context-5.3.23.jar:na]
at spring.context@5.3.23/org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[spring-context-5.3.23.jar:na]
at spring.context@5.3.23/org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.23.jar:na]
at spring.boot@2.7.5/org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-2.7.5.jar:na]
at spring.boot@2.7.5/org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.5.jar:na]
at spring.boot@2.7.5/org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.5.jar:na]
at spring.boot@2.7.5/org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-2.7.5.jar:na]
at spring.boot@2.7.5/org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-2.7.5.jar:na]
at modules@0.0.1-SNAPSHOT/com.example.modules.ModulesApplication.main(ModulesApplication.java:10) ~[classes/:na]
Caused by: java.lang.IllegalAccessError: class com.example.modules.ModulesApplication$$EnhancerBySpringCGLIB$$91c2c32e (in module modules) cannot access class org.springframework.cglib.core.ReflectUtils (in unnamed module @0x3bd40a57) because module modules does not read unnamed module @0x3bd40a57
at modules@0.0.1-SNAPSHOT/com.example.modules.ModulesApplication$$EnhancerBySpringCGLIB$$91c2c32e.CGLIB$STATICHOOK1(<generated>) ~[classes/:na]
at modules@0.0.1-SNAPSHOT/com.example.modules.ModulesApplication$$EnhancerBySpringCGLIB$$91c2c32e.<clinit>(<generated>) ~[classes/:na]
at java.base/java.lang.Class.forName0(Native Method) ~[na:na]
at java.base/java.lang.Class.forName(Class.java:467) ~[na:na]
at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:602) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:363) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.cglib.proxy.Enhancer.generate(Enhancer.java:585) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:110) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:108) ~[spring-core-5.3.23.jar:5.3.23]
at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) ~[spring-core-5.3.23.jar:5.3.23]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) ~[spring-core-5.3.23.jar:5.3.23]
... 19 common frames omitted我不知道我还需要哪些模块。我尝试过添加一些JVM参数,但这一点也没有帮助。
发布于 2022-10-28 04:08:05
Java (JPMS)不允许使用反射,除非使用反射向模块打开适当的包。
堆栈跟踪中的“由:”行显示非法访问:
com.example.modules.ModulesApplication$$EnhancerBySpringCGLIB$$91c2c32e类(在模块中)无法访问类org.springframework.cglib.core.ReflectUtils (在未命名模块@0x3bd40a57中),因为模块模块没有读取未命名模块@0x3bd40a57。
由于包org.springframework.cglib.core没有模块描述符,所以它位于“未命名模块”中,不能“打开”反射。
可以通过添加以下VM参数(无论是在命令行上还是在IDE的运行配置上)来修复这个问题,以允许modules模块读取未命名的模块:
--add-reads modules=ALL-UNNAMEDhttps://stackoverflow.com/questions/74214182
复制相似问题