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

时间:2013-10-16 04:01:14

标签: java jar version classloader conflict

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

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

你仍然可以使用ClassLoader解决方案,但这是一个很容易犯错的令人讨厌的业务。

您也可以使用不同的JVM。

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

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

答案 1 :(得分:1)

OSGi可以解决这个问题。 OSGi包只不过是一个带有额外元数据详细说明版本的jar。捆绑包具有版本号,并将详细说明从属罐的版本号(或范围)。