有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java嵌入式Neo4j SPI类(lucene PostingsFormat)错误

我已经将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


共 (3) 个答案

  1. # 1 楼答案

    尝试添加以下依赖项:

    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-backward-codecs</artifactId>
        <version>5.5.0</version>
    </dependency>
    
  2. # 3 楼答案

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

    [Thread-0]信息组织。日食码头。util。日志-日志记录在473ms时初始化 [Thread-0]信息火花。嵌入式服务器。码头。EmbeddedJettyServer-==火花已点燃。。。 [Thread-0]信息火花。嵌入式服务器。码头。嵌入式JettyServer->&燃气轮机;收听0.0.0.0:8080 [Thread-0]信息组织。日食码头。服务器服务器-jetty-9.3.6。v20151106 [Thread-0]信息组织。日食码头。服务器ServerConnector-已启动ServerConnector@5aa07ed2{HTTP/1.1[HTTP/1.1]}{0.0.0.0:8080} [Thread-0]信息组织。日食码头。服务器服务器-在772ms时启动

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

    我将输出打印为“Hello World”

    我采取了以下步骤:

    1)从github url下载项目 2) 作为指向Java8的maven项目导入 3) Maven安装成功 3) 冉主课 4) 在浏览器中查看了输出

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

    或者与你的maven有关。可能需要在运行maven安装后检查您的maven依赖项,以查看是否下载了预期的JAR

    祝你好运