5

我正在尝试熟悉 Eclipse 对 Java 9 模块的支持。我将 Eclipse Oxygen 与来自市场的 Java 9 支持包和最新的 JDK 9 u180 一起使用。

问题涉及模块依赖关系以及如何让 Eclipse 知道它们。

我的理解是在 Eclipse 中一个 JPMS 模块对应一个 Eclipse 项目。我创建了三个项目(也称为模块)并添加了必要的模块信息文件:

module com.effjava.app {
  requires com.effjava.support;
}

module com.effjava.support {
  exports com.effjava.support.hlp;
  exports com.effjava.support.test;
  exports com.effjava.support.user;

  requires transitive com.effjava.util;
}

module com.effjava.util {
  exports com.effjava.util.cbk;
  exports com.effjava.util.reg;
}

它是一个简单的自上而下的依赖链。模块描述符正确;我已经成功地在 IntelliJ 中设置了相同的模块。

我的问题是:我如何告诉 Eclipse 顶部模块依赖于底部模块,例如中间模块com.effjava.support依赖于底部模块com.effjava.util

我确实在 module-info 文件中指定了依赖项(通过requires transitive),Eclipse 毫无怨言地接受了该指令。然而,当我编译中间模块时,我看到一条错误消息com.effjava.support。错误消息说,包中的公共类型com.effjava.util.cbk不可见,尽管由模块导出com.effjava.util并由module com.effjava.support.

显示项目结构和编译器错误消息的屏幕截图

为了指定依赖,我将底层模块的内容导出com.effjava.util到了一个jar文件中,包括module-info.class。因此它是一个模块化的 jar 文件。

然后我将模块化jar文件导入到com.effjava.support模块中,并将导入的模块化jar文件添加到构建路径中。无济于事。

构建路径截图

我在没有导入的情况下尝试了它,只是将模块化 jar 添加为外部库。它也没有用。

问题是:如何在 Eclipse 中正确指定模块依赖关系?

4

0 回答 0