从2个不同的模块

时间:2017-04-23 16:35:55

标签: java maven

在我的项目中,我有2个子模块,让我们称它们为模块A和模块B. 它们都具有com.example.MyClass.java的结构作为它们的类。

我有第三个模块C,我想使用A和B中的类。

但是当我尝试这样做时,我只能从第一个添加的模块中实现该类。

有没有像A.com.example.MyClass和B.com.example.MyClass这样的方法,所以我可以在同一个班级使用它们?

2 个答案:

答案 0 :(得分:1)

首先这对我来说听起来像是一个设计缺陷,因为我们在maven模块级别上已经在包级别上分离了相同的包名称声音,因此不能在包装上表示相同的隔离级别水平也是如此。如果您有不同的类组,通常会发生这种情况...除此之外如果您具有完全相同的包和类名,那么因为类名在此处违反的包中必须是唯一的。结果将在类路径上有两个不同的JAR,它们提供相同的类。真正使用的类取决于哪个JAR首先在类路径上,这是巧合所以不可预测。

OSGi在这里没有帮助,因为你有同样的问题,因为你想从不同的bundle访问同一个类,这是无法解决的。此外,在JDK 9中,这也不起作用,因为这些类必须公开(与OSGi中相同)也会失败。

答案 1 :(得分:0)

如果您希望这两个类具有相同的名称,则必须更改其中一个类的包名称。否则,无法导入这两个类。

另一种解决方案是更改其中一个类的类名。