2016-12-05 79 views
0

我正在尝试使用适合于Java 9模块系统的最佳实践,这样我就可以获得更多的好处(现在我们的系统可以从一些模块化中受益)。使用Java 9模块,多个模块是否可以导出相同的包?

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

作为一个相关的问题,如果相关的话,这个点是实际上是结算还是还没有最终。

+2

不知道,但我怀疑你应该开始使用模块做这样的事情,因为它仍然违反https://en.wikipedia.org/wiki/Package_principles(尤其是CRP中的“inseparable”) – zapl

+1

我认为你是指A和B都同时加载到同一个JVM中? – Jay

+2

关闭此问题:链接的问题是关于非导出的包,而这个问题是关于导出的包。我相信差异是相关的。 – Jay

回答

3

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

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

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

+0

我想这意味着像一个具有多个可能的依赖项的日志框架提供相同的类是可以接受的,但几乎所有其他事情都需要一致地划分。 –

相关问题