如何在运行时解决jar冲突?

我有两个jar子有冲突。 它们都包含一个具有相同包名和类名的类。 由于同样的原因,我无法删除其中任何一个。

那么,有什么方法可以解决这个问题吗? 理想情况下,我希望有一种方法可以让我决定在运行时应该调用jar的类。

我非常感谢任何人的帮助。

您可以使用不同的名称在项目文件夹中创建包结构(与冲突的jar中的包结构相同),并从任何jar中复制相应的内容。 使用jar中的一个包和你项目中的另一个包(你刚刚创建的新包)我最近做过这个并且它有效。

祝好运!

在这种情况下你的选择是。

1.(最佳方式)修改应用程序代码以使用最新版本的jar。 如果您的程序依赖于另一个依赖于过时的jar文件的插件,请检查最新版本的插件。

  1. 使用OSGi

  2. 使用两个类加载器。 需要研究一点理论,有时可能会导致意外错误。

现在我不打算举例,因为下面的链接中有大量信息和示例可以帮助您

Java,Classpath,Classloading =>同一个jar /项目的多个版本

Jar hell:如何在运行时使用类加载器将一个jar库版本替换为另一个jar库版本

http://java.dzone.com/articles/java-classloader-handling

http://javarevisited.blogspot.in/2012/12/how-classloader-works-in-java.html

任何动态链接的东西都必须有一些方法来区分运行时链接的内容。 这是包层次结构的全部要点,以划分代码。 您可以解决相同类名的问题,但是一旦包相同,我就不知道强制JVM链接到另一个的方法。

您可以使用不同的类加载器并在不同的沙箱中运行冲突的组件。

如果两个jar都在类路径上,并且您正在使用系统类加载机制,则无法动态选择要使用的jar。 Java类加载会选择第一个类文件。