我正在尝试在 IntelliJ 中创建一个非常简单的具有多个模块的 java 模块项目。
相应的文档位于https://openjdk.org/projects/jigsaw/quick-start#multimodulecompile中的src目录中,每个模块都应该有自己的目录。
所以我这样组织我的项目:
src/easytext.analysis/module-info.java
src/easytext.analysis/com/msantos/pluralsight/java9modules/easytext/analysis/World.java
src/easytext.cli/module-info.java
src/easytext.cli/com/msantos/pluralsight/java9modules/easytext/cli/Main.java
如您所见,IntelliJ 给出错误: 'module-info.java' 已存在于模块中
但是,如果我从命令行编译,我没有问题:
javac --module-source-path src/main/java/ -d out $(find . -name '*.java')
有人可以向我解释为什么 IntelliJ 会给出这个错误(考虑到从 java 的角度来看这是一个有效的结构)以及如何修复它?
提前非常感谢您
带有模块的 IntelliJ
定义模块后,编译可以工作,但现在向模块添加依赖项,会发现模块之间无法访问彼此。命令行编译再次正常工作。
模块
easytext.分析模块
module easytext.analysis {
exports com.msantos.pluralsight.java9modules.easytext.analysis;
}
它将包暴露给世界
easytext.cli 模块
module easytext.cli {
requires easytext.analysis;
}
它定义了对 easytext.analysis 模块的依赖
但是从图片中我们可以看到,无法访问该包。这是为什么?
您的设置是一种不寻常的设置,因为您希望在单个 Maven 模块中包含多个 Java 模块。这可能会导致 IntelliJ 出错,因为它将 Maven 模块映射到 IntelliJ 模块。 “模块”的这三种用途是三种不同的东西,这当然没有帮助。
如果您打算稍后将 Maven 模块打包到单个 jar 中,请注意 Java 模块系统不允许每个 jar 文件包含多个模块。我建议将您的项目转变为多模块 Maven 项目,每个 Java 模块都成为专用的 Maven 模块。