gpt4 book ai didi

java - 如何解决导致JAR 冲突的外部库?

转载 作者:行者123 更新时间:2023-11-30 11:04:38 25 4
gpt4 key购买 nike

我在我的应用程序中使用 Lucene 5.0 并且我还在使用 DISCO java library ,它又使用 Lucene 3.5。当我导入 DISCO jar 时,我无法再运行该程序,因为我收到有关两个版本库之间冲突的 Lucene 类的运行时错误。

有办法解决吗?

最佳答案

是的。三种解决方案:

  1. 您可以降级您的代码以使用 Lucene 3.5
  2. 您可以升级 DISCO 以使用 Lucene 5.0(您自己或让 DISCO 团队来升级)
  3. 您可以使用多个 ClassLoader 来隔离代码。

最后一点是有效的,因为如果完全限定名称相同并且,当它们由相同的 ClassLoader 加载时,Java 中的两个类是相同的。

OSGi framework可以做这样的把戏。 Eclipse 使用 Equinox,它是 OSGi 的一个实现。

一种选择是捆绑所有内容并设置 OSGi 以正确加载内容。

要自己解决您的问题,您可以创建两个 ClassLoader。一个加载您的应用程序和 Lucene 5.0。其他加载 DISCO 和 Lucene 3.5。

丑陋的部分是您现在可以为 Lucene 中的类获取 ClassCastException。它们将具有相同的名称,但就 Java 而言它们将不相同(不同的类加载器)。为了能够在两个类加载器之间传递数据,您需要一个父类 ClassLoader,它具有 POJO,您可以在其中放置所有要共享的数据。 java.lang.String 也将在这个 ClassLoader 中(否则,事情会非常非常复杂)。

共享依赖项也可以放在父 ClassLoader 中。

然后您需要一个位于 DISCO/Lucene 代码之上的薄适配器层,它允许您执行您想要的操作,而无需使用该类加载器不喜欢的任何类。

关于java - 如何解决导致JAR 冲突的外部库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29964197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com