2016-07-04 59 views
5

Włożyłem Neo4j 3.0.1 do aplikacji Java 8, ale mam problemy z interfejsem SPI.Wbudowana klasa SPI Neo4j (lucene PostingsFormat) Błąd

bieganie od wewnątrz IntelliJ daje poprawne wyniki zgodnie z oczekiwaniami, ale tak szybko, jak zbudować artefakt do JAR, uruchom go i próbować napisać do Neo4j, pojawia się następujący wyjątek:

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 

Nie Wydaje się, że nie jest wyjątkiem od Neo4j, więc zakładam, że niektóre zależności nie są rozwiązywane przy użyciu kompilacji Mavena.

Mam następujących w moim pliku 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> 

Jak mogę rozwiązać ten problem?

UPDATE:

Mam utworzony ponownie tę kwestię z bardzo prostego pustego projektu, źródło można znaleźć tutaj, jeśli chcesz, aby uruchomić go na koniec: https://github.com/SeanNieuwoudt/neo4j-spi

Odpowiedz

0

Try Aby dodać następującą zależność:

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

Niestety, problem nadal istnieje: – SeanNieuwoudt

+0

może dodanie słoika z "lucene-core"? –

+0

To samo, myślę, że ma coś wspólnego z opakowaniem Mavena. Stworzyłem czysty projekt demonstracyjny i zaktualizowałem pytanie linkiem do niego, jeśli chcesz rzucić okiem. Problem jest łatwo powtarzalny. – SeanNieuwoudt

1

Wziąłem twój projekt i wykonane w moim zaćmieniu. Nie mam żadnych problemów. Tutaj poniżej kłód konsoli po uruchomieniu:

[wątku-0] Informacje org.eclipse.jetty.util.log - logowanie inicjowane @ 473ms [wątku-0] Informacje spark.embeddedserver.jetty.EmbeddedJettyServer - == zapłonowa zapalił ... [Wątek-0] INFO spark.embeddedserver.jetty.EmbeddedJettyServer - >> Słuchanie na 0.0.0.0:8080 [Wątek-0] INFO org.eclipse.jetty.server.Server - jetty-9.3. 6.v20151106 [wątek-0] INFO org.eclipse.jetty.server.ServerConnector - uruchomiono ServerConnector @ 5aa07ed2 {HTTP/1.1, [http/1.1]} {0.0.0.0:8080} [wątek-0] INFO org .eclipse.jetty.server.Server - Rozpoczęty @ 772ms

Podczas uzyskiwania dostępu - http://localhost:8080/

mam wyjście drukowane jako „Hello World”

Kroki i następnie:

1) Pobrano projektu od github url 2) przywożonych jako projekty maven skierowanymi do java 8 3) Maven instalacja zakończyła się powodzeniem 3) Ran główna klasa 4) Widziałem wyjście w przeglądarce.

Czy brakuje mi jakichkolwiek kroków, aby zreplikować rzeczywisty problem?

Albo ma coś wspólnego ze swoim mavenem. Można sprawdzić zależność maven po uruchomieniu instalacji, aby sprawdzić, czy oczekiwane słoiki są pobierane.

Powodzenia.

+0

Dzięki za uruchomienie. Czy zbudowałeś niezależny artefakt Jar lub uruchomiłeś go z kontekstu Eclipse? Ta ostatnia działa również dla mnie, ale problem polega na zapakowaniu rzeczywistego artefaktu w samodzielny Jar, a następnie uruchomieniu go z 'java -jar', tak jak w przypadku dystrybucji aplikacji. Wygląda na to, że albo nadpisuje, albo nie kopiuje zależności w Jar w pakiecie podczas kompilacji. – SeanNieuwoudt