我正在尝试使用 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 许可协议
解决这个问题的 理想 方法是
并要求他们在未来修复这种反射访问。
来自 邮件列表中的一个线程:
像以前一样,通过明智地使用
--add-exports
和--add-opens
选项,可以避免任何模式下的警告消息。因此,当前可用的临时解决方案是使用
--add-exports
作为 文档 中提到的 VM 参数:这将允许
target-module
访问package
中的所有公共类型。如果你想访问仍然被封装的 JDK 内部类,你将不得不使用--add-opens
参数允许 _深度反射_:在您当前访问
java.io.Console
的情况下,您只需将其添加为 VM 选项 -另外,请注意来自与上面链接相同的线程
当
deny
成为默认模式时,我希望permit
至少在一个版本中保持支持,以便开发人员可以继续迁移他们的代码。 Thepermit
,warn
, anddebug
modes will, over time, be removed, as will the--illegal-access
option itself.所以最好改变实现并遵循理想的解决方案。