无法读取未命名的模块

时间:2019-08-12 07:44:09

标签: java jigsaw

我遇到了一个非常讨厌的问题,我不明白...

  1. 我们有一整套用jdk8编写的实用程序库,并且与拼图无关,因此我们也没有在META-INF文件中设置自动模块名称。

  2. 现在我们需要将使用这些实用程序库的产品迁移到java11。

  3. 我创建了一个module-info.java并输入了所有必需的模块,但是util-libraries存在一些问题。
  4. 一些util库作为未命名模块加载,可以将它们添加为必需的模块。但是对于其中一些其他实用程序库,无法添加它们,因为它们没有基于其jar文件获得模块名。

从我的IDE中,我得到以下错误:

软件包“ x”在未命名的模块中声明,但模块“ y”未读取。

package x在我们的实用程序库中之一,而模块y是应迁移到java11的产品。

有什么想法可以理解这个问题吗?

最诚挚的问候

2 个答案:

答案 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上进行了错误报告。