我正在寻找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)
我需要添加什么才能超越它?
答案 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>
它们都包含所有必要的库。