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

时间:2018-12-07 12:57:54

标签: java maven java-module

我有一个带有两个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),所以构建失败。

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

  • 是否可以向编译器提示该模块将在将来声明?
  • 有没有一种方法可以禁止所有此类警告?

2 个答案:

答案 0 :(得分:1)

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

更新:一种替代方法是使用https://stackoverflow.com/a/53717183/14731演示的--module-source-path

谢谢艾伦·贝特曼(Alan Bateman)向我指出这个方向!

答案 1 :(得分:0)

从这个问题可以推断出,您的情况是模块AB并存,而模块A不依赖模块{{1 }}。

从模块系统的前景来看,由于B合格地导出到模块A,因此如果模块路径上没有解析模块B则抛出警告。 / em>,同时构建B

在IntelliJ-IDEA上,我可以通过将模块A的依赖项添加到模块B来解决此问题,而无需进行任何声明更改。尽管使用Maven框架,但我无法想象这里没有周期性的依赖,也许the suggestion by khmarbaise会有所帮助。

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

<罢工>     -Xlint:-出口

或作为Alan points out for correction

A

大声考虑,这是因为警告是合格出口的结果,但关于未找到模块的信息。

有用 :您可以在这些命令行参数with javac command.

上找到详细信息