Java 9,拼图和自动模块

时间:2018-06-23 17:20:03

标签: java intellij-idea java-9 jigsaw

Java 9 /10。我已经在一个简单的项目上苦苦挣扎了一个多星期。

enter image description here

您可以在图片中看到,我想将commons-collections用作自动模块(我曾尝试用maven添加它,但效果不佳)。

所以,我有一个红色,需要将罐子放在模块路径上。 IntelliJ从何处获取此模块路径?如何告诉IDE将commons-collections添加到项目中,以便
1.编译器可以在编译时找到它,
2. Maven可以在构建时找到它吗?

有人可以帮忙吗?

编辑: 我尝试将其作为模块依赖项以各种不同组合的形式添加到项目结构对话框中。我实际上尝试了数百种操作,在结构中移动了jar,但找不到足够简单的文档来告诉我如何执行此操作。 我使用了编译器选项来添加“ --module-path automatic”(特定于模块的编译器选项和常规的编译选项),以使IDEA能够找到所需的东西,并让Java用它来创建一个自动模块。

2 个答案:

答案 0 :(得分:4)

您需要先添加一个库条目,以使其在Modules下可用:

第1步:添加一个库(添加-> Java-> jar文件)

enter image description here

第2步:选择模块(请记住单击“应用”)

enter image description here

之后,module-info.java文件将被成功验证:

enter image description here

答案 1 :(得分:0)

如果您从包含module-info.java的(intellij)模块中运行程序,则Intellij使用模块路径,否则它将使用类路径。

我尝试将common4导入为模块,这似乎对我有用,但是与您的相比,我不得不使用不同的'requires'参数。您的“需要”是“ commons.collections4”,我的是“ org.apache.commons.collections4”(检查commons4清单条目中突出显示的“自动模块名称”,并改用它)。

commons4 module

如果commons4清单中缺少自动模块名称(4.1及更早版本中不存在),则如果名称中包含数字或非法字符,则Java可能无法将jar作为模块检测到。因此,某些Maven存储库jar将无法工作,并且intelli不会将这些jar视为模块。

enter image description here

您还可以使用以下命令检查文件名是否错误:

jar --file=/path/to/jar --describe-module

如果命令失败,则可能是jar中没有自动模块名称条目,并且文件名命名不正确。

jar --file=C:\temp\jigsaw1-1.0.jar --describe-module

不好

jar --file=C:\temp\jigsaw1.0.jar --describe-module`

'jigsaw1.0:无效的模块名称:'0'不是Java标识符'

因此某些maven jar可能看起来不太相似,因此可能无法检测为模块。