如何在java项目中使用两个版本的jar

如何在java项目中使用两个版本的jar,java,jar,version,classloader,conflict,Java,Jar,Version,Classloader,Conflict,在我的java项目中,我需要使用依赖于lucene-3.6.2的neo4j-1.9.3,以及依赖于lucene-4.4.0的ElasticSearch。我知道如果我想直接使用两个版本的lucene,我可以使用ClassLoader从lucene加载不同的类 但问题是我现在不会直接使用lucene的API。在运行neo4j的API时,是否可以加载lucene-3.6.2,在运行elasticsearch的API时是否可以加载lucene-4.4.0。lucene的两个版本现在发生冲突,我需要在一个

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

但问题是我现在不会直接使用lucene的API。在运行neo4j的API时,是否可以加载lucene-3.6.2,在运行elasticsearch的API时是否可以加载lucene-4.4.0。lucene的两个版本现在发生冲突,我需要在一个项目中运行neo4j和elasticsearch。如何解决依赖性问题


提前感谢。

您仍然可以使用类加载器解决方案,但这是一项很糟糕的业务,很容易出错

您还可以使用不同的JVM

但我个人选择的解决方案有以下两种:

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

    • OSGi可以解决此问题。OSGi捆绑包只不过是一个包含额外元数据详细版本的jar。一个捆绑包有一个版本号,它将详细说明依赖jar的版本号(或范围)。

      是的,我将尝试通过更新neo4j或拆分它们来解决这个问题。但是可以告诉我更多关于类加载器解决方案或者如何使用不同的JVM吗?我只想学这些。感谢它们在理论上是可能的解决方案,但我发现它们比我的目的更值得吹捧。以下是参考资料:我在尝试对lucene使用lucene-core-4.3.1.jar和对嵌入式neo4j数据库使用lucene-core-3.6.2.jar时遇到了同样的问题,但neo4j与lucene-core-4.3.1.jar的关系破裂。你是如何解决你的问题的?是的,我也是。我也有同样的问题。请告诉我们你是如何解决的