Java9、拼图及自动模块
Java 9, Jigsaw and automatic modules
Java9 / 10.一个简单的项目折腾了一个多星期
如图所示,我想使用commons-collections作为一个自动模块(我尝试用maven添加它,但效果不佳)。
所以,我需要将 jar 放到模块路径中。 IntelliJ 从哪里获取这个模块路径?我如何告诉 IDE 将 commons-collections 添加到项目中,以便
1.编译器在编译时可以找到并且
2.Maven在构建时能找到吗?
有人可以帮忙吗?
编辑:
我试图将它作为各种不同组合中的模块依赖项添加到项目结构对话框中。我实际上已经尝试了数百种方法,在结构中移动了 jar,但我找不到足够简单的文档来告诉我如何执行此操作。
我使用编译器选项添加“--module-path automatic”(模块特定和通用编译选项)以使 IDEA 找到它并让 Java 从中创建一个自动模块.
您需要先添加一个库条目,使其在 Modules
:
下可用
第 1 步:添加库(添加 -> Java -> jar 文件)
第2步:Select模块(记得点击"Apply")
之后,module-info.java
文件将成功验证:
如果您 运行 来自包含模块 info.java 的 (intellij) 模块的程序,Intellij 使用模块路径,否则它将使用类路径。
我尝试将 common4 作为模块导入,它似乎对我有用,但与您的相比,我不得不使用不同的 'requires' 参数。你的 'requires' 是 'commons.collections4',我的是 'org.apache.commons.collections4'(检查突出显示的 Automatic-Module-Name 的 commons4 清单条目并改用它)。
如果 commons4 清单中缺少 Automatic-Module-Name(它在 4.1 及更早版本中不存在),如果名称包含数字或非法字符,Java 可能无法将 jar 检测为模块.因此,某些 Maven 存储库 jar 将无法工作,并且 intelli 不会将这些 jar 视为模块。
您还可以使用以下命令检查错误的文件名:
jar --file=/path/to/jar --describe-module
如果命令失败,可能是因为 jar 没有 Automatic-Module-Name 条目并且文件名命名不正确。
还行
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 可能无法被检测为模块,因为它们看起来很相似。
Java9 / 10.一个简单的项目折腾了一个多星期
如图所示,我想使用commons-collections作为一个自动模块(我尝试用maven添加它,但效果不佳)。
所以,我需要将 jar 放到模块路径中。 IntelliJ 从哪里获取这个模块路径?我如何告诉 IDE 将 commons-collections 添加到项目中,以便
1.编译器在编译时可以找到并且
2.Maven在构建时能找到吗?
有人可以帮忙吗?
编辑: 我试图将它作为各种不同组合中的模块依赖项添加到项目结构对话框中。我实际上已经尝试了数百种方法,在结构中移动了 jar,但我找不到足够简单的文档来告诉我如何执行此操作。 我使用编译器选项添加“--module-path automatic”(模块特定和通用编译选项)以使 IDEA 找到它并让 Java 从中创建一个自动模块.
您需要先添加一个库条目,使其在 Modules
:
第 1 步:添加库(添加 -> Java -> jar 文件)
第2步:Select模块(记得点击"Apply")
之后,module-info.java
文件将成功验证:
如果您 运行 来自包含模块 info.java 的 (intellij) 模块的程序,Intellij 使用模块路径,否则它将使用类路径。
我尝试将 common4 作为模块导入,它似乎对我有用,但与您的相比,我不得不使用不同的 'requires' 参数。你的 'requires' 是 'commons.collections4',我的是 'org.apache.commons.collections4'(检查突出显示的 Automatic-Module-Name 的 commons4 清单条目并改用它)。
如果 commons4 清单中缺少 Automatic-Module-Name(它在 4.1 及更早版本中不存在),如果名称包含数字或非法字符,Java 可能无法将 jar 检测为模块.因此,某些 Maven 存储库 jar 将无法工作,并且 intelli 不会将这些 jar 视为模块。
您还可以使用以下命令检查错误的文件名:
jar --file=/path/to/jar --describe-module
如果命令失败,可能是因为 jar 没有 Automatic-Module-Name 条目并且文件名命名不正确。
还行
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 可能无法被检测为模块,因为它们看起来很相似。