【问题标题】:Embedded Neo4j SPI Class (lucene PostingsFormat) Error嵌入式 Neo4j SPI 类(lucene PostingsFormat)错误
【发布时间】:2016-07-04 20:00:16
【问题描述】:

我已将 Neo4j 3.0.1 嵌入到 Java 8 应用程序中,但我遇到了 SPI 问题。

从 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

启动 Neo4j 似乎也不例外,所以我假设某些依赖项没有通过 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>

我该如何解决这个问题?

更新:

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

【问题讨论】:

    标签: java maven intellij-idea neo4j lucene


    【解决方案1】:

    我接受了你的项目并在我的 Eclipse 中执行。我没有问题。以下是启动后的控制台日志:

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

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

    我的输出打印为“Hello World”

    我遵循的步骤:

    1) 从你的 github url 下载你的项目 2) 导入为指向 java 8 的 maven 项目 3) Maven 安装成功 3)跑主班 4) 在浏览器中看到输出。

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

    或者与您的行家有关。可以在运行 maven install 后检查您的 maven 依赖项,以查看是否下载了预期的 jar。

    祝你好运。

    【讨论】:

    • 感谢您运行它。您是否构建了独立的 Jar 工件或从 Eclipse 上下文运行它?后者也适用于我,但问题在于将实际工件打包到独立的 Jar 中,然后像分发应用程序时那样使用 java -jar 运行它。它似乎在构建过程中覆盖或不将 Jar 依赖项复制到包中。
    【解决方案2】:

    尝试添加以下依赖:

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

    【讨论】:

    • 很遗憾,问题仍然存在
    • 可以添加lucene-core jar 吗?
    • 同样的事情,我认为它与 Maven 打包有关。我已经创建了一个干净的演示项目,如果你想看一下,我用一个链接更新了这个问题。问题很容易重现。
    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    相关资源
    最近更新 更多