【问题标题】:How to use two versions of jar in my java project如何在我的java项目中使用两个版本的jar
【发布时间】:2013-10-24 01:42:08
【问题描述】:

在我的 java 项目中,我需要使用依赖于 lucene-3.6.2neo4j-1.9.3ElasticSearch取决于 lucene-4.4.0。我知道如果我想直接使用两个版本的 lucene,我可以使用 ClassLoader 从 lucenes 中加载不同的类。

但问题是我现在不会直接使用lucene的api。有什么办法可以在neo4j的api运行时加载lucene-3.6.2,而在运行elasticsearch的api时可以加载lucene-4.4.0。现在lucene的两个版本冲突了,我需要在一个项目中运行neo4j和elasticsearch。如何解决依赖问题?

提前致谢。

【问题讨论】:

  • 我在尝试将 lucene-core-4.3.1.jar 用于 LUCENE 并将 lucene-core-3.6.2.jar 用于嵌入式 neo4j 数据库时遇到了同样的问题,但 neo4j 与 lucene-core-4.3 中断了.1.jar。您是如何解决问题的?
  • 是的,我也有同样的问题,请告诉我们你是如何解决的

标签: java jar version classloader conflict


【解决方案1】:

您仍然可以使用 ClassLoader 解决方案,但这是一项很容易出错的令人讨厌的事情。

您也可以使用不同的 JVM。

但我个人会选择以下任一(或两者)的解决方案:

  • 验证 Neo4J 是否与 Lucene 4.x 中断。也许你会很幸运,使用最新版本不会有任何问题。
  • 将它们拆分为两个应用程序,其中一个应用程序(例如 Neo4J)由另一个应用程序通过 Web 服务(很可能是 REST)调用进行访问。 Neo4J 有一个内置的REST API

【讨论】:

  • 是的,我会尝试通过更新 neo4j 或拆分它们来解决它。但能告诉我更多关于 ClassLoader 解决方案或如何使用不同 JVM 的信息吗?我就是想学这些。谢谢
  • 理论上它们是可能的解决方案,但我发现它们比它们对我的目的更有价值。以下是参考资料:tutorials.jenkov.com/java-reflection/…stackoverflow.com/questions/16714043/…
【解决方案2】:

OSGi 可以解决这个问题。 OSGi 包只不过是一个带有附加元数据详细版本的 jar。一个包有一个版本号,并且会详细说明依赖 jar 的版本号(或范围)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2018-04-28
    • 2011-08-31
    • 2015-10-31
    • 2016-04-08
    相关资源
    最近更新 更多