2016-04-21 150 views
0

我们有一个过程,需要在不同时间引用具有相同名称的两个不同加密类。两个类名都与相同的包路径“com.abc.security.encryption”相同。从相同名称的包中引用不同类的相同名称

这两个类都具有相同的包名称com.abc.security.encryption,但它们存在于不同的jar文件中。

假设在Jar A和ENCRYPTION.class(旧逻辑)中存在的ENCRYPTION.class(旧逻辑)出现在罐子B中。 现在在我的过程中,当我们调用引用ENCRYPTION.class的Jar B API时,指的是Jar A中的ENCRYPTION.class(新逻辑),而不是Jar B中的ENCRYPTION.class(旧逻辑)。

直到我删除具有ENCRYPTION.class(新逻辑)的Jar A时,Jar B中存在的ENCRYPTION.class(旧逻辑)才被引用。

由于两种加密逻辑都来自不同的模块,许多不同的模块正在使用,我不能要求他们改变软件包的名称。

我需要一种方法来确保在必要的地方引用逻辑而不改变这些模块中的任何内容。 可以在我的进程的类路径或代码中更改任何内容,以便调用Jar B API,调用Jar B本身中的ENCRYPTION.class(旧逻辑)。当我直接调用ENCRYPTION.class时,它应该参考罐子A中的ENCRYPTION.class(新逻辑)。

尝试将第一个类路径添加为“。”。为过程。但它没有解决问题。 您的帮助是最受赞赏的。

感谢, NVN

+0

这不是你的问题的答案,但不要这样命名的东西。就我所知,它不被支持。 – nhouser9

+0

这是在我们无法改变的其他模块中完成的。需要一个解决方案以不同的时间间隔调用它们。 – Nvn

回答

0

您应该删除从classpath有问题的罐子。具有多个包含相同完全限定类名称的jar的类路径是一种灾难处方。

如果这不是一个选项,你可以可能能够创建一个自定义的类加载器来做这个交换。但它可能并不容易。有一个类似的问题关于这可能让你开始,如果你沿着这条路走:Unloading classes in java?

+0

我无法从班级路径中移除任何罐子,因为两个罐子都需要不同的时间间隔。 – Nvn