我们有一个过程,它需要在不同的时间引用两个具有相同名称的不同加密类。这两个类名都是相同的包路径com.abc.security.encryption。
这两个类具有相同的包名com.abc.security.encryption,但是它们出现在不同的jar文件中。
假设ENCRYPTION.class (新逻辑)出现在Jar A中,ENCRYPTION.class(旧逻辑)出现在Jar B中。现在在我的过程中,当我们调用引用ENCRYPTION.class的Jar B时,引用的是Jar A中的ENCRYPTION.class(新逻辑),而不是Jar B中的ENCRYPTION.class(旧逻辑)。
直到我删除具有ENCRYPTION.class(新逻辑)的Jar A,才会引用Jar B中存在的ENCRYPTION.class(旧逻辑)。
由于这两个加密逻辑来自许多不同模块使用的不同实用程序模块,因此我无法要求它们更改包的名称。
我需要一种方法来确保在不更改这些模块中的任何内容的情况下,两个逻辑都被引用到所需的位置。我的进程的类路径或代码中是否有任何更改,以便调用Jar be,调用Jar B本身中存在的ENCRYPTION.class(旧逻辑)。当我调用直接ENCRYPTION.class时,它应该引用Jar A中的ENCRYPTION.class(新逻辑)。
尝试将第一个类路径添加为“。为了这个过程。但这并没有解决问题。非常感谢您的帮助。
谢谢,Nvn
发布于 2016-04-21 12:05:28
您应该从类路径中删除有问题的jar。如果类路径包含多个jars,而这些jars包含相同的完全限定类名,则会导致灾难。
如果这不是一个选项,您可以创建一个自定义的类加载器来执行此交换。但这可能并不容易。这里有一个类似的问题,如果你沿着这条路走下去,它可能会让你开始:Unloading classes in java?
https://stackoverflow.com/questions/36759155
复制相似问题