如何定义对未知模块的合格导出?
How to define qualified exports to unknown modules?
我有一个包含两个 Maven 模块 A
和 B
的 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
存在,但由于模块 A
在 B
之前编译并且不依赖于它,编译器无法知道这一点。因为我将编译器配置为将警告视为错误 (-Werror
),所以构建失败。
鉴于我想继续将警告视为错误,解决此问题的最佳方法是什么?
- 有没有办法向编译器提示该模块将在以后声明?
- 有没有办法抑制所有此类警告?
正如我从问题中推断的那样,您的情况是模块 A
和 B
共存并且模块 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) 为我指明了这个方向!
我有一个包含两个 Maven 模块 A
和 B
的 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
存在,但由于模块 A
在 B
之前编译并且不依赖于它,编译器无法知道这一点。因为我将编译器配置为将警告视为错误 (-Werror
),所以构建失败。
鉴于我想继续将警告视为错误,解决此问题的最佳方法是什么?
- 有没有办法向编译器提示该模块将在以后声明?
- 有没有办法抑制所有此类警告?
正如我从问题中推断的那样,您的情况是模块 A
和 B
共存并且模块 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) 为我指明了这个方向!