2016-07-04 69 views
5

我已将Neo4j 3.0.1嵌入到Java 8应用程序中,但我一直在遇到SPI问题。嵌入式Neo4j SPI类(lucene PostingsFormat)错误

从内部的IntelliJ产生正确的结果如预期,但只要我打造神器的JAR,运行它,并尝试写入Neo4j的运行,我得到以下异常:

Caused by: org.neo4j.kernel.impl.store.UnderlyingStorageException: java.lang.IllegalArgumentException: An SPI class of type org.apache.lucene.codecs.PostingsFormat with name 'BlockTreeOrds' does not exist. You need to add the corresponding JAR file supporting this SPI to your classpath. The current classpath supports the following names: [Lucene50] 
    at org.neo4j.kernel.impl.transaction.command.LabelUpdateWork.apply(LabelUpdateWork.java:62) 
    at org.neo4j.kernel.impl.transaction.command.LabelUpdateWork.apply(LabelUpdateWork.java:33) 
    at org.neo4j.concurrent.WorkSync.doSynchronizedWork(WorkSync.java:121) 
    at org.neo4j.concurrent.WorkSync.apply(WorkSync.java:90) 
    at org.neo4j.kernel.impl.transaction.command.IndexBatchTransactionApplier.close(IndexBatchTransactionApplier.java:105) 
    at org.neo4j.kernel.impl.api.BatchTransactionApplierFacade.close(BatchTransactionApplierFacade.java:70) 
    at org.neo4j.kernel.impl.storageengine.impl.recordstorage.RecordStorageEngine.apply(RecordStorageEngine.java:336) 
    at org.neo4j.kernel.impl.api.TransactionRepresentationCommitProcess.applyToStore(TransactionRepresentationCommitProcess.java:78) 
    ... 25 more 

有似乎不会出现异常,所以我假设某些依赖关系没有用Maven构建解决。

我在pom.xml文件中的以下内容:

<dependency> 
    <groupId>com.sparkjava</groupId> 
    <artifactId>spark-core</artifactId> 
    <version>2.5</version> 
</dependency> 

<dependency> 
    <groupId>org.neo4j</groupId> 
    <artifactId>neo4j</artifactId> 
    <version>3.0.1</version> 
    <type>pom</type> 
</dependency> 

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-simple</artifactId> 
    <version>1.7.21</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.lucene</groupId> 
    <artifactId>lucene-codecs</artifactId> 
    <version>5.5.0</version> 
</dependency>   

<dependency> 
    <groupId>org.neo4j</groupId> 
    <artifactId>neo4j-slf4j</artifactId> 
    <version>3.0.0-M02</version> 
</dependency> 

<dependency> 
    <groupId>com.google.code.gson</groupId> 
    <artifactId>gson</artifactId> 
    <version>2.6.2</version> 
</dependency> 

<dependency> 
    <groupId>com.github.jknack</groupId> 
    <artifactId>handlebars</artifactId> 
    <version>4.0.5</version> 
</dependency> 

<dependency> 
    <groupId>com.opencsv</groupId> 
    <artifactId>opencsv</artifactId> 
    <version>3.7</version> 
</dependency> 

<dependency> 
    <groupId>commons-codec</groupId> 
    <artifactId>commons-codec</artifactId> 
    <version>1.10</version> 
</dependency> 

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-annotations</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 

请问该如何解决这个问题?

UPDATE:

我已经重新创建了这个问题,有一个非常简单的空白项目,源可以在这里找到,如果你想在你的最终运行:https://github.com/SeanNieuwoudt/neo4j-spi

回答

0

尝试添加以下依赖项:

<dependency> 
    <groupId>org.apache.lucene</groupId> 
    <artifactId>lucene-backward-codecs</artifactId> 
    <version>5.5.0</version> 
</dependency> 
+0

不幸的是,问题仍然存在 – SeanNieuwoudt

+0

也许增加'lucene-core' jar? –

+0

同样的事情,我认为它与Maven包装有关。我已经创建了一个干净的演示项目,并且如果您想要查看,请使用链接更新该问题。问题很容易重现。 – SeanNieuwoudt

1

我把你的项目,并在我的日食执行。我没有问题。以下是启动后控制台日志:

INFO org.eclipse.jetty.util.log - 日志初始化@ 473ms [线程0]信息spark.embeddedserver.jetty.EmbeddedJettyServer - == Spark已经点燃了... [Thread-0] INFO spark.embeddedserver.jetty.EmbeddedJettyServer - >>正在监听0.0.0.0:8080 [Thread-0] INFO org.eclipse.jetty.server.Server - jetty-9.3。 6.v20151106 INFO org.eclipse.jetty.server.ServerConnector已启动ServerConnector @ 5aa07ed2 {HTTP/1.1,[http/1.1]} {0.0.0.0:8080} [线程-0] INFO org .eclipse.jetty.server.Server - Started @ 772ms

访问时 - http://localhost:8080/

我得到的输出打印为“Hello World”的

步骤i如下:

1)从进口为指向的Java 8 3)Maven的Maven项目的github上的url 2)下载项目安装成功 3)冉主类 4)在浏览器中看到输出。

我是否错过了复制实际问题的任何步骤?

或者与你的maven有关。运行maven安装后,可能会检查你的maven依赖关系,看看是否下载了预期的jar。

祝你好运。

+0

感谢您运行它。您是否构建了独立的Jar构件,或者从Eclipse上下文中运行它?后者也适用于我,但问题是将实际的工件封装到独立的Jar中,然后像分发应用程序时那样用'java -jar'运行它。它看起来好像是在构建过程中覆盖或不在jar包中拷贝到包中。 – SeanNieuwoudt