JDK9:发生了非法的反射访问操作。 org.python.core.PySystemState

新手上路,请多包涵

我正在尝试使用 Java9 (JDK9) 运行 DMelt 程序 ( http://jwork.org/dmelt/ ) 程序,它给了我如下错误:

 WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.python.core.PySystemState (file:/dmelt/jehep/lib/jython/jython.jar) to method java.io.Console.encoding()
WARNING: Please consider reporting this to the maintainers of org.python.core.PySystemState
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

我该如何解决?我试图将 –illegal-access=permit 添加到脚本“dmelt.sh”的最后一行(我在 Linux 中使用 bash),但这并没有解决这个问题。我对此感到非常沮丧。我经常使用这个程序很长一段时间。也许我永远不应该转向 JDK9

原文由 IraS 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 489
1 个回答

解决这个问题的 理想 方法是

将此报告给 org.python.core.PySystemState 的维护者

并要求他们在未来修复这种反射访问。


但是,如果默认模式允许非法反射访问,那么有必要让人们知道这一点,这样当这在未来的版本中不再是默认模式时人们就不会感到惊讶。

来自 邮件列表中的一个线程

 --illegal-access=permit

这将是 JDK 9 的 默认 模式。它打开每个显式模块中的每个包以在所有未命名模块中编码,即类路径上的代码,就像 --permit-illegal-access 现在所做的那样。

第一个非法反射访问操作会导致发出警告,如 --permit-illegal-access ,但在那之后不会发出警告。此单个警告将描述如何启用更多警告。

 --illegal-access=deny

这将禁用所有非法的反射访问操作,但由其他命令行选项启用的操作除外,例如 --add-opens 。这 将成为未来版本中的默认 模式。

像以前一样,通过明智地使用 --add-exports--add-opens 选项,可以避免任何模式下的警告消息。


因此,当前可用的临时解决方案是使用 --add-exports 作为 文档 中提到的 VM 参数:

 --add-exports module/package=target-module(,target-module)*

将模块更新为 export 包为 target-module ,无论模块声明如何。 target-module 可以全部 未命名 以导出到所有未命名的模块。

这将允许 target-module 访问 package 中的所有公共类型。如果你想访问仍然被封装的 JDK 内部类,你将不得不使用 --add-opens 参数允许 _深度反射_:

 --add-opens module/package=target-module(,target-module)*

将模块更新为 open 包为 target-module ,无论模块声明如何。

在您当前访问 java.io.Console 的情况下,您只需将其添加为 VM 选项 -

 --add-opens java.base/java.io=ALL-UNNAMED


另外,请注意来自与上面链接相同的线程

deny 成为默认模式时,我希望 permit 至少在一个版本中保持支持,以便开发人员可以继续迁移他们的代码。 The permit , warn , and debug modes will, over time, be removed, as will the --illegal-access option itself.

所以最好改变实现并遵循理想的解决方案。

原文由 Naman 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题