Java 9 - 无法作为模块解析
Java 9 - Cannot be resolved as a module
非常简单的用例,我正在使用 Eclipse Oxygen 4.7.3a,其中包括来自 Java 9 的支持。我有两个项目是 Java 9 个项目:
- projectOne
| - src
| - module-info.java
| - com
| - package1
| - first
| Classificator.java
- projectTwo
| - src
| - module-info.java
| - com
| - package2
| - second
| Classifiable.java
我想在Classificator
中使用Classifiable
class,所以我尝试将第二个模块导入到第一个项目中。
模块-info.java 项目 1:
module projectOne {
requires projectTwo;
}
模块-info.java 项目 2:
module projectTwo {
}
Eclipse 给我错误:
projectTwo cannot be resolved to a module
我是否必须将所有 Java 项目集中在一个 "main project" 下,以便让 Eclipse 知道所有这些模块都可以在其中使用?还是我漏掉了什么?
不,您不需要将它们放在同一目录中。理想情况下,您的 project-one
模块定义了一些 uses
,它们由您的 project-two
模块实现(反之亦然)。获取您使用的接口的运行时实现。为此,jars/classes 都必须在模块路径上。
有关模块构建、多模块构建等的更多信息,...您可以参考 this link. Even if you do not use gradle, its tutorial on java 9 module build 非常有趣并提供了一些见解。
虽然连接即服务当然是一种可行的方法(如其他答案中所述),但让我补充一点,requires
当然也可以工作。
第一种方法可能遗漏的一点是:Eclipse 仍然需要知道在哪里寻找模块。在现实世界的项目中,这通常由您选择的构建工具加上像 m2e or buildship.
这样的插件来调解。
如果没有使用这样的插件,为了使项目projectTwo
可见,需要在项目projectOne
的Build Path中添加一个正常的项目依赖。一旦项目在构建路径上,项目定义的模块可以在 module-info.java
.
中的引用中解析
非常简单的用例,我正在使用 Eclipse Oxygen 4.7.3a,其中包括来自 Java 9 的支持。我有两个项目是 Java 9 个项目:
- projectOne
| - src
| - module-info.java
| - com
| - package1
| - first
| Classificator.java
- projectTwo
| - src
| - module-info.java
| - com
| - package2
| - second
| Classifiable.java
我想在Classificator
中使用Classifiable
class,所以我尝试将第二个模块导入到第一个项目中。
模块-info.java 项目 1:
module projectOne {
requires projectTwo;
}
模块-info.java 项目 2:
module projectTwo {
}
Eclipse 给我错误:
projectTwo cannot be resolved to a module
我是否必须将所有 Java 项目集中在一个 "main project" 下,以便让 Eclipse 知道所有这些模块都可以在其中使用?还是我漏掉了什么?
不,您不需要将它们放在同一目录中。理想情况下,您的 project-one
模块定义了一些 uses
,它们由您的 project-two
模块实现(反之亦然)。获取您使用的接口的运行时实现。为此,jars/classes 都必须在模块路径上。
有关模块构建、多模块构建等的更多信息,...您可以参考 this link. Even if you do not use gradle, its tutorial on java 9 module build 非常有趣并提供了一些见解。
虽然连接即服务当然是一种可行的方法(如其他答案中所述),但让我补充一点,requires
当然也可以工作。
第一种方法可能遗漏的一点是:Eclipse 仍然需要知道在哪里寻找模块。在现实世界的项目中,这通常由您选择的构建工具加上像 m2e or buildship.
这样的插件来调解。如果没有使用这样的插件,为了使项目projectTwo
可见,需要在项目projectOne
的Build Path中添加一个正常的项目依赖。一旦项目在构建路径上,项目定义的模块可以在 module-info.java
.