从同名包中引用不同的同名类

时间:2016-04-21 03:35:12

标签: java classloader

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

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

让我们说Jar A中存在ENCRYPTION.class(新逻辑)和罐子B中存在ENCRYPTION.class(旧逻辑)。 现在在我的过程中,当我们调用引用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时,它应该引用Jar A中的ENCRYPTION.class(新逻辑)。

尝试将第一个类路径添加为“。”为了这个过程。但它没有解决问题。 非常感谢您的帮助。

谢谢, NVN

1 个答案:

答案 0 :(得分:0)

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

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