【问题标题】:Referring different classes of same name from packages of same name从同名包中引用不同的同名类
【发布时间】:2016-04-21 12:16:38
【问题描述】:

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

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

假设 Jar A 中存在 ENCRYPTION.class(new logic),Jar B 中存在 ENCRYPTION.class(old logic)。 现在在我的过程中,当我们调用引用 ENCRYPTION.class 的 Jar B API 时,指的是 Jar A 中存在的 ENCRYPTION.class(new logic) 而不是 Jar B 中存在的 ENCRYPTION.class(old logic)。

直到我删除具有 ENCRYPTION.class(new logic) 的 Jar A,Jar B 中存在的 ENCRYPTION.class(old logic) 才被引用。

由于两个加密逻辑都来自许多不同模块使用的不同实用程序模块,我无法要求他们更改包的名称。

我需要一种方法来确保在所需位置引用这两个逻辑而不更改这些模块中的任何内容。 可以在我的进程的类路径或代码中更改任何内容,以便调用 Jar B API 调用 Jar B 本身中存在的 ENCRYPTION.class(old logic)。当我直接调用 ENCRYPTION.class 时,它应该引用 Jar A 中的 ENCRYPTION.class(new logic)。

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

谢谢, 不知道

【问题讨论】:

  • 这不是你问题的答案,但不要这样命名。据我所知,不支持。
  • 在其他模块中完成,我们无法更改。需要一个解决方案以不同的时间间隔调用它们。

标签: java classloader


【解决方案1】:

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

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

【讨论】:

  • 我无法从类路径中删除任何 jars,因为两个 jars 需要的时间间隔不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多