我遇到了一个非常讨厌的问题,我不明白...
我们有一整套用jdk8编写的实用程序库,并且与拼图无关,因此我们也没有在META-INF文件中设置自动模块名称。
现在我们需要将使用这些实用程序库的产品迁移到java11。
从我的IDE中,我得到以下错误:
软件包“ x”在未命名的模块中声明,但模块“ y”未读取。
package x在我们的实用程序库中之一,而模块y是应迁移到java11的产品。
有什么想法可以理解这个问题吗?
最诚挚的问候
答案 0 :(得分:0)
我使用AdoptOpenJDK jdk-11.0.3.7-hotspot并在运行时收到以下异常消息
class A (in module A) cannot access class B (in unnamed module @0x12345678) because module A does not read unnamed module @0x12345678
并使用--add-reads vm参数解决了该问题
--add-reads iamdsim.heat.adapter=ALL-UNNAMED
我读到某个地方,默认情况下,只有自动模块才“读取”未命名的模块。但我在java.lang.module packagedoc中找不到它。
编辑:它记录在The State of the Module System
中 具有无法派生自动模块名称的名称的jar文件总是很麻烦。发生这种情况的原因是名称中带有数字或保留字,例如“ interface”(例如“ db-interface-1.0.0.jar”)。
答案 1 :(得分:0)
这个特定问题的解决方案只是我的IDE。 IntelliJ不支持在IDE中从导入的“项目”中读取“未命名模块”或“自动模块”。我已经在jetbrains上进行了错误报告。