Java 9 - 无法解析为模块

时间:2018-04-19 15:30:16

标签: java eclipse java-9

非常简单的用例,我使用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

我想在Classifiable中使用Classificator类,所以我尝试将第二个模块导入到第一个项目中。

module-info.java项目1:

module projectOne   {
    requires projectTwo;
}

module-info.java项目2:

module projectTwo   {

}

Eclipse给了我错误:

  

projectTwo无法解析为模块

我是否必须在一个“主项目”下收集所有Java项目才能让Eclipse知道所有这些模块都可以在其中使用?或者我错过了什么?

2 个答案:

答案 0 :(得分:2)

不,您不需要它们在同一目录中。理想情况下,您的location模块定义了一些project-one,它们由uses模块实现(反之亦然)。获取已使用接口的运行时实现。为此,两个jar /类必须位于模块路径上。

有关模块构建,多模块构建的更多信息,......您可以参考this link。即使你不使用gradle,它的tutorial on java 9 module build也非常有趣,并提供了一些见解。

答案 1 :(得分:0)

虽然作为服务布线当然是一种可行的方法(如另一个答案中所述),但我要补充一点,requires当然也可以使用。

第一种方法可能缺少的是:Eclipse仍然需要知道在哪里寻找模块。在实际项目中,这通常由您选择的构建工具以及m2ebuildship等插件调解。

如果没有使用此类插件,则应将正常项目依赖项添加到项目projectOne的构建路径中,以使项目projectTwo可见。项目在构建路径上后,项目定义的模块可以在module-info.java的引用中解析。