【发布时间】:2020-03-01 23:10:06
【问题描述】:
我正在将一个相当大的单体 Spring Boot 应用程序从 Java 8 迁移到 Java 11。在我修复了移除的 JEE 模块后,我遇到了基于新引入的模块系统概念的强封装的几个反射错误。
启动应用程序适用于 Java 11,但是,通过 Maven 执行全新安装不起作用。由于反射与强封装,InaccessibleObjectException 导致多次测试失败。
java.lang.reflect.InaccessibleObjectException: Unable to make field private jdk.internal.reflect.MethodAccessorImpl jdk.internal.reflect.DelegatingMethodAccessorImpl.delegate accessible: module java.base does not "opens jdk.internal.reflect" to unnamed module @6a969fb8 at com......(some Test-Method).
我已经尝试过帖子How to solve InaccessibleObjectException ("Unable to make {member} accessible: module {A} does not 'opens {package}' to {B}") on Java 9? 中建议的解决方案。
但是使用参数 --add-opens java.base/jdk.internal.reflect=ALL-UNNAMED 作为 Maven 参数或将其存储在 maven jvm.config 中都没有帮助。
还有其他方法可以消除这些异常吗?
【问题讨论】:
-
您使用的是哪个版本的 Spring Boot?
-
我使用的是 Spring Boot 2.1.6 版
-
该测试代码是否需要实际访问该模块?也许这可以通过稍微更改测试代码来解决。
标签: java maven spring-boot reflection migration