使用Java 9模块,多个模块能够导出相同的包吗?

时间:2016-12-05 23:19:48

标签: java java-9 java-module

我正在尝试使用符合Java 9模块系统的最佳实践,这样我就可以做更少的工作来获得好处(我们的系统现在可以从一些模块化中获益)。

在模块A的当前标准下是否允许导出包com.example.foo以及模块B导出包com.example.foo?

作为一个相关的问题,如果相关的话,这个点是否真的已经解决,或者它是否仍然不是最终的。

1 个答案:

答案 0 :(得分:3)

根据最新的State of the Module System,模块系统确保“每个模块最多只读取一个定义给定包的模块,并且定义相同命名包的模块不会相互干扰。”并且:“当模块中的代码引用包中的类型时,该包保证在该模块中或在该模块读取的模块中定义。”

这意味着如果 - 在构建时和运行时 - 两个不同的模块可以导出相同的包 - 没有模块同时依赖于A和B,并且A和B不相互依赖。从理论上讲,您可以使用两个模块导出相同的包,并一次一个地使用它们与另一个依赖模块。

我还建议,正如已经建议的那样,最佳做法是让一个模块导出一个模块,而不是两个模块。