从Java 8迁移到Java 11之后{InaccessibleObjectException

我正在将一个相当大的整体式Spring Boot应用程序从Java 8迁移到Java11。修复了已删除的JEE模块之后,由于新引入的模块系统概念的强封装性,我遇到了一些反射错误。 / p>

启动应用程序可与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?中建议的解决方案。

但是既不使用参数-添加打开java.base / jdk.internal.reflect = ALL-UNNAMED 作为Maven参数,也不将其存储在maven jvm.config中会有所帮助。

还有其他方法可以摆脱这些异常吗?

xqxqwps 回答:从Java 8迁移到Java 11之后{InaccessibleObjectException

您不应将这些标志添加到Maven本身,而应将其添加到测试配置中,因为测试可能在单独的jvm中运行:http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html

<argLine>
  

在命令行上设置的任意JVM选项。   用户属性是:argLine

或者如果您使用其他工具,则与其他测试插件的标志类似。

请注意,您也可以完全不使用此内部API来解决其中的一些问题,因此您应该先尝试一下。

本文链接:https://www.f2er.com/3158733.html

大家都在问