Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的java应用程序中的两个类具有相同的限定名_Java_Spring_Maven_Jaxb_Avro - Fatal编程技术网

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

我的java应用程序中的两个类具有相同的限定名,java,spring,maven,jaxb,avro,Java,Spring,Maven,Jaxb,Avro,我有maven模块设置,一个类存在于两个具有相同名称和包结构的模块中com.expd.common.etms\u功能\u共享\u服务\u类型.v2.ExportConsol 这些类是在maven构建期间生成的。一个来自wsdl,另一个来自avro模式,wsdl和avro模式都不在我们的控制范围内。该应用程序在运行时仅拾取1个,不包括预期的另一个 有没有一种方法可以在不必重命名或更改包名的情况下同时使用这两种名称 当然可以。您需要将这些类保存在单独的类装入器中,这样它们自然就互不了解 但是,重命名

我有maven模块设置,一个类存在于两个具有相同名称和包结构的模块中
com.expd.common.etms\u功能\u共享\u服务\u类型.v2.ExportConsol

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


有没有一种方法可以在不必重命名或更改包名的情况下同时使用这两种名称

当然可以。您需要将这些类保存在单独的类装入器中,这样它们自然就互不了解


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

如果不分离类加载器,基本的beahvior是,如果刚加载了具有FQN的同一个类,则将忽略类发现过程中出现的第二个类。所以我建议在类加载期间保留一个版本的类,部署一个包含该类的jar以避免混淆。

据我所知,没有。你可能会在某种程度上搞乱类加载器,但我怀疑结果是否会非常稳定或易于使用,如果它能工作的话。avro是开源的,我建议你完成这个项目并进行所需的更改。您可以尝试使用maven shade plugin@JFMeier构建一个包含重新定位的类的jar,该插件看起来很有希望,但它不起作用。我的猜测是,如果我们正在导入一个jar或依赖项,这个插件就可以工作。因为这些xsd文件是模块的一部分,所以这个插件不起作用。@Frozendragon-这没有意义。我的avro模式是由我们公司的另一个项目构建的,apacheavro与此无关。