我的Java应用程序中的两个类具有相同的限定名称

时间:2018-12-21 18:13:57

标签: java spring maven jaxb avro

我有maven模块设置,并且两个具有相同名称和包结构的模块中存在一个类。 com.expd.common.etms_functions_shared_service_types.v2.ExportConsol

这些类是在Maven构建期间生成的。一个来自wsdl,另一个来自avro模式,wsdl和avro模式都不在我们的控制范围内。该应用程序在运行时仅能拾取1个,而预期的其他除外。

有没有一种方法可以同时使用它们而不必重命名它们或更改程序包名称?

2 个答案:

答案 0 :(得分:0)

当然可以。您需要将这些类保存在单独的类加载器中,因此它们自然不会相互了解。

但是重命名(例如,使用maven shade plugin)将是更简单,方便的解决方案。

答案 1 :(得分:0)

如果您不分离类加载器,则基本行为是,如果仅加载具有FQN的同一个类,则在类发现期间的第二次出现将被忽略。因此,我建议在类加载期间保留类的一个版本,并部署一个包含该类的jar以避免混淆。