嵌入式Neo4j需要哪些罐子?

时间:2014-07-12 23:05:24

标签: java lucene neo4j

我正在寻找this question的更新答案。以前,最小的Neo4j" Hello World"应用程序需要两个罐子。现在它显然需要一些其他的罐子,但我不知道哪些罐子。

如果我按照其他问题的建议包含neo4j-kernel-2.1.2和geronimo-jta_1.1_spec-1.1.1,我会收到此错误:

java.lang.ClassNotFoundException: org.neo4j.collection.primitive.PrimitiveLongIterator
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

如果我添加neo4j-primitive-collections-2.1.2,那么我会因为这个根本原因而出错:

Caused by: java.lang.IllegalArgumentException: No schema index provider org.neo4j.kernel.api.index.SchemaIndexProvider found.

this question上的答案表明我需要neo4j-lucene-index。当我添加该jar时,我收到此错误:

Caused by: java.lang.ClassNotFoundException: org.apache.lucene.store.Directory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

最后,当我添加lucene-core时,我收到此错误:

Caused by: java.lang.ClassNotFoundException: org.apache.lucene.document.Fieldable
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

我需要添加什么才能超越它?

2 个答案:

答案 0 :(得分:5)

我相信我已经为Neo4j 2.x找到了最小的依赖关系集。我最初尝试使用lucene-core-4.9.0,但在版本3.6.2之后的某个时候,org.apache.lucene.document.Fieldable接口已从该库中删除。因此,最小的罐子是:

neo4j-kernel (2.1.2)
neo4j-primitive-collections (2.1.2)
neo4j-lucene-index (2.1.2)
lucene-core (3.6.2)
jta (1.1)

这些重约4.5 MB,比我想要的大,但我想我可以忍受它。我也被告知neo4j-lucene-index(这是需要lucene-core的内容)并非严格要求。与jta类似,它实际上只是所需接口的一种可能实现。但我不知道其他任何实施。

答案 1 :(得分:4)

正如另一个答案正确提到的那样,最简单的方法是使用具有依赖关系管理器的构建工具。目前使用最广泛的是Maven和Gradle。默认情况下,它们都使用Maven Central存储库来提取依赖关系和传递依赖关系。

根据您的嵌入式应用程序是否使用cypher,您应该在pom.xml中添加以下依赖项:

<dependency>
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j-lucene-index</artifactId>
    <version>2.1.2</version>
</dependency>

或(当使用密码时):

<dependency>
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j-cypher</artifactId>
    <version>2.1.2</version>
</dependency>

它们都包含所有必要的库。