7

私のJavaプロジェクトでは、 lucene -3.6.2に依存するneo4j-1.9.3lucene -4.4.0 に依存するElasticSearch を使用する必要があります。2 つのバージョンの lucene を直接使用したい場合は、ClassLoader を使用して lucene から異なるクラスをロードできることを知っています。

しかし問題は、今は lucene の API を直接使用しないことです。neo4j の API の実行中に lucene-3.6.2 をロードし、elasticsearch の API の実行中に lucene-4.4.0 をロードできる方法はありますか。現在、lucene の 2 つのバージョンが競合しているため、neo4j と elasticsearch を 1 つのプロジェクトで実行する必要があります。依存関係の問題を解決するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

1

ClassLoader ソリューションを引き続き使用することもできますが、それは間違いを犯しやすい厄介なビジネスです。

異なる JVM を使用することもできます。

しかし、私が個人的に選択する解決策は、次のいずれか (または両方) です。

  • Neo4J が Lucene 4.x で壊れることを確認します。運が良ければ、最新バージョンを使用しても問題はないでしょう。
  • それらを 2 つのアプリケーションに分割し、そのうちの 1 つ (Neo4J など) が Web サービス (ほとんどの場合 REST) 呼び出しを介して他のアプリケーションからアクセスされます。とにかく、Neo4JにはREST APIが組み込まれています。
于 2013-10-16T04:21:48.267 に答える
1

OSGi はこの問題を解決できます。OSGi バンドルは、バージョンを詳述する追加のメタデータを含む jar にすぎません。バンドルにはバージョン番号があり、依存する jar のバージョン番号 (または範囲) の詳細が示されます。

于 2014-06-19T19:35:54.553 に答える