如何定义对未知模块的合格导出?

How to define qualified exports to unknown modules?

我有一个包含两个 Maven 模块 AB 的 Maven 项目。 A 包含以下 Java 模块定义:

module A {
    exports internal.util to B;
    exports external.A;
}

B 包含以下 Java 模块定义:

module B {
    requires A;

    exports external.B;
}

当我构建项目时,出现错误:

[WARNING] module-info.java:[16,106] module not found: B

模块 B 存在,但由于模块 AB 之前编译并且不依赖于它,编译器无法知道这一点。因为我将编译器配置为将警告视为错误 (-Werror),所以构建失败。

鉴于我想继续将警告视为错误,解决此问题的最佳方法是什么?

正如我从问题中推断的那样,您的情况是模块 AB 共存并且模块 A 不依赖于模块 B

从模块系统的角度来看,由于 A 对模块 B 进行了合格的导出,因此如果模块 B 未解析,则会引发警告在构建 A.

时在模块路径

在 IntelliJ-IDEA 上,我可以通过将模块 B 的依赖项添加到模块 A 来解决此类问题,而无需任何声明更改。虽然使用 Maven 框架,但我无法想象这里没有循环依赖的东西,也许 可以提供帮助。

注意:解决此问题的另一种方法也可以是使用命令行参数禁用此类警告:

-Xlint:-出口

-Xlint:-module

大声思考,那是因为,警告是合格导出的结果,但是关于找不到模块。

有用:您可以在这些命令行参数中找到详细信息with javac command.

我通过扫描 JDK 11 源代码找到了解决方法:-Xlint:-module。如果有人找到更好的解决方案,我仍然愿意接受。

UPDATE:另一种方法是使用 --module-source-path,如

所示

感谢艾伦·贝特曼 (Alan Bateman) 为我指明了这个方向!