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

Kev*_*son 4 java java-9 java-module

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

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

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

Jay*_*Jay 5

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

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

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