当前位置: 首页 > 知识库问答 >
问题:

从Java 8迁移到Java 11后出现不可访问的对象异常

邓英卓
2023-03-14

我正在将一个相当大的monolith spring boot应用程序从Java 8迁移到Java 11。在修复了删除的JEE模块后,由于新引入的模块系统概念的强封装,我遇到了几个反射错误。

启动应用程序可以使用Java11,但是,通过Maven执行干净的安装不起作用。由于反射和强封装,由于无法访问对象异常导致了几个测试失败。

java.lang.reflect.无法将字段设为私有jdk.internal.reflect.方法访问jdk.internal.reflect.委托方法访问mpl.delegate:模块java.base不会打开jdk.internal.reflect到未命名的模块@6a969fb8在com......(一些测试方法)。

我已经尝试了那篇文章中建议的解决方案如何在Java9上解决不可用对象异常(无法使{成员}可访问:模块{A}不会将{包}打开到{B})。

但是使用参数add都不能打开java。基本/jdk。内部的reflect=ALL-UNNAMED为Maven参数,也不将其存储在Maven jvm中。配置帮助。

有没有其他方法可以消除这些例外?

共有1个答案

徐焱
2023-03-14

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

<argLine>

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

或者,如果您正在使用其他测试插件,则使用其他类似于其他测试插件的标志。

请注意,您也可以通过根本不使用此内部API来修复其中一些问题,因此您应该先尝试一下。

 类似资料: