我正在尝试熟悉 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;
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的自上而下的依赖链。模块描述符正确;我已经在 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 …