In my java project, I need to use neo4j-1.9.3 that depends on lucene-3.6.2, and ElasticSearch which depends on lucene-4.4.0. I know that if I want to use two versions of lucene directly, I can use ClassLoader to load different classes from the lucenes.
But the problem is that I won't use lucene's apis directly now. Is there any way that lucene-3.6.2 can be loaded when neo4j's apis are running, and lucene-4.4.0 can be loaded while running elasticsearch's apis. The two versions of lucene conflict now, and I need to run neo4j and elasticsearch in one project. How could I solve the dependency problem?
Thanks in advance.
解决方案
You could still use a ClassLoader solution, but that is a nasty business where it is easy to make mistakes.
You could also use different JVM's.
But the solution I would personally choose is either (or both) of the following:
Verify that Neo4J breaks with Lucene 4.x. Maybe you will get lucky and there won't be any problems using the latest version.
Split them up into two applications where one of them, say Neo4J, is accessed by the other application via web service (most likely REST) calls. Neo4J has a built-in REST API anyway.