Java 从2个不同的模块导入2个具有相同名称和包的不同类

Java 从2个不同的模块导入2个具有相同名称和包的不同类,java,maven,Java,Maven,在我的项目中,我有两个子模块,我们称它们为模块A和模块B。 它们的类都是com.example.MyClass.java结构 我有第三个模块C,我想使用a和B中的类 但是当我尝试这样做时,我只能实现下面添加的第一个模块中的类 有没有像a.com.example.MyClass和B.com.example.MyClass这样的方法,可以在同一个类中使用它们?如果希望两个类具有相同的名称,则必须更改其中一个类的包名称。否则,无法同时导入这两个类 另一个解决方案是更改其中一个类的类名 首先,对我来说,

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

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

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


有没有像a.com.example.MyClass和B.com.example.MyClass这样的方法,可以在同一个类中使用它们?

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


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

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


OSGi在这里没有帮助,因为您在这里遇到了相同的问题,因为您希望从不同的bundle访问相同的类,这是不可能解决的。此外,在JDK 9中,这将不起作用,因为这些类必须公开(与OSGi中的相同),这也将失败。

使用OSGi或其他自定义类加载技巧在技术上不可能做到这一点吗?相同的类名对于类加载器必须是唯一的,而不是JVM。@据我所知,无法导入具有相同包和类名的两个类。如果您知道或能够找到解决方案,请添加答案。是否有方法通过特定模块导入?例如ModuleName.package.ClassName?@treyer如果你是指Java 9模块,我不知道。我还没有使用Java9和模块,我指的是maven模块