2013-10-16 28 views
5

にjarファイルの2つのバージョンを使用する方法、私はのNeo4j-1.9.3のLucene-3.6.2に依存して使用する必要がある、とのLuceneに依存ElasticSearch -4.4.0。 2つのバージョンのluceneを直接使用したい場合は、ClassLoaderを使用してルーメンから異なるクラスをロードできます。私のJavaプロジェクトでは、私のJavaプロジェクト

しかし、問題は私が今すぐlucene's apisを使用しないことです。 neo4jのapi実行中にlucene-3.6.2をロードできる方法はありますか?また、elasticsearchのapiを実行している間にlucene-4.4.0をロードすることができますか? 2つのバージョンのluceneが矛盾しているので、neo4jとelasticsearchを1つのプロジェクトで実行する必要があります。依存関係の問題をどのように解決できますか?

ありがとうございます。

+1

LUCENEにはlucene-core-4.3.1.jar、組み込みneo4jデータベースにはlucene-core-3.6.2.jarを使用しようとして同じ問題がありますが、lucene-core-4.3.1.jarではneo4jが破損します。あなたの問題をどうやって解決しましたか? – qualebs

答えて

0

あなたはまだClassLoaderソリューションを使うことができますが、それは間違いを起こしやすい厄介なビジネスです。

また、別のJVMを使用することもできます。

しかし、私は個人的に選ぶだろう解決策はどちらか(または両方)以下の:

  • のNeo4jはLuceneの4.xのに壊れていることを確認しますたぶんあなたは幸運になるでしょうし、最新バージョンを使用しても問題はありません。
  • 2つのアプリケーションに分割します。そのうちの1つ、たとえばNeo4Jには、Webサービス(ほとんどの場合はREST)呼び出しを介して他のアプリケーションがアクセスします。とにかにNeo4JにはREST APIが組み込まれています。
+0

ええ、私はneo4jを更新するか、それらを分割することでそれを解決しようとします。しかし、ClassLoaderソリューションや、別のJVMを使う方法についてもっと教えてくれますか?私はこれらを学びたいだけです。ありがとう – GameBoy

+0

彼らは理論的に可能な解決策ですが、私は彼らが私の目的のために価値があるものよりも使い易いと感じました。ここに参考文献があります:http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.htmlとhttp://stackoverflow.com/questions/16714043/run-java-code-in-multiple- jvm-instances – Vidya

0

OSGiではこの問題を修正できます。 OSGiバンドルは、バージョンを詳述する追加のメタデータを持つjarファイルにすぎません。バンドルにはバージョン番号があり、依存するjarのバージョン番号(または範囲)が表示されます。

関連する問題