首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Java 8迁移到Java 11后的InaccessibleObjectException

从Java 8迁移到Java 11后的InaccessibleObjectException
EN

Stack Overflow用户
提问于 2019-11-05 14:39:49
回答 1查看 10.3K关注 0票数 1

我正在将一个相当大的monolith spring引导应用程序从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?中提出的解决方案。

但是,无论是使用参数java.base/jdk.internal.reflect=ALL-UNNAMED --add--作为Maven参数,还是将其存储在maven jvm.config中都没有帮助。

还有其他方法来消除这些例外吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-06 14:31:10

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

代码语言:javascript
复制
<argLine>

要在命令行上设置的

任意JVM选项。用户属性为:argLine

或者与其他测试插件类似的标志,如果您使用的是其他的东西。

请注意,您可能还可以通过根本不使用这个内部API来修复其中的一些问题,所以您应该先尝试一下。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58713686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档