2016-07-21 14 views
3

Ich habe ein Spring Boot-Projekt, das Spring Data Neo4j verwendet. Wenn ich das Projekt von meiner IDE (Intellij) starte, funktioniert alles gut. Wenn ich das Projekt von der Befehlszeile (java -jar ...) aus führe, erhalte ich die Nachricht, dass meine Entität keine Instanz einer persistenten Klasse ist.Spring Data Neo4j ClassFileProcessor lädt keine Klassen

gebe ich die basePackages zum Session:

@Bean 
public SessionFactory getSessionFactory() { 
    return new SessionFactory(getConfiguration(), basePackages); 
} 

Und ich habe die Hauptklasse kommentierte mit:

@EnableNeo4jRepositories(basePackages = "org.sgh.persistence") 

Das Info-Protokoll zeigt die folgenden:

Beim Start von IntelliJ :

2016-07-20 15:58:30.435 INFO 67581 --- [   main] o.s.d.neo4j.config.Neo4jConfiguration : Initialising Neo4jSession 
2016-07-20 15:58:30.443 DEBUG 67581 --- [   main] org.neo4j.ogm.scanner.ClassPathScanner : Classpath elements: 
2016-07-20 15:58:30.443 DEBUG 67581 --- [   main] org.neo4j.ogm.scanner.ClassPathScanner : /Users/sebastianglahn/workspace/sandbox/spring-data-neo4j-example/build/classes/main/org/sgh/persistence 
2016-07-20 15:58:30.447 DEBUG 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Processing: org.sgh.persistence.ExampleRepository -> java.lang.Object 
2016-07-20 15:58:30.449 DEBUG 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Processing: org.sgh.persistence.TreeEntity -> java.lang.Object 
2016-07-20 15:58:30.450 INFO 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Starting Post-processing phase 
2016-07-20 15:58:30.450 INFO 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Building annotation class map 
2016-07-20 15:58:30.450 INFO 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Building interface class map for 3 classes 
2016-07-20 15:58:30.450 DEBUG 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : - ExampleRepository implements 1 interfaces 
2016-07-20 15:58:30.450 DEBUG 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : - org.springframework.data.neo4j.repository.GraphRepository 
2016-07-20 15:58:30.450 DEBUG 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : - TreeEntity implements 0 interfaces 
2016-07-20 15:58:30.450 DEBUG 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : - Object implements 0 interfaces 
2016-07-20 15:58:30.450 DEBUG 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Post-processing: org.sgh.persistence.ExampleRepository 
2016-07-20 15:58:30.450 DEBUG 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : - No ClassInfo found for interface class: org.springframework.data.neo4j.repository.GraphRepository 
2016-07-20 15:58:30.450 DEBUG 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Post-processing: org.sgh.persistence.TreeEntity 
2016-07-20 15:58:30.450 DEBUG 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Checking for @Transient classes.... 
2016-07-20 15:58:30.450 DEBUG 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Registering converters and deregistering transient fields and methods.... 
2016-07-20 15:58:30.451 INFO 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Post-processing complete 
2016-07-20 15:58:30.452 INFO 67581 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : 3 classes loaded in 11 milliseconds 

Wenn von der Kommandozeile gestartet:

2016-07-21 09:11:46.441 INFO 67991 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Starting Post-processing phase 
2016-07-21 09:11:46.441 INFO 67991 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Building annotation class map 
2016-07-21 09:11:46.441 INFO 67991 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Building interface class map for 0 classes 
2016-07-21 09:11:46.441 DEBUG 67991 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Checking for @Transient classes.... 
2016-07-21 09:11:46.441 DEBUG 67991 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Registering converters and deregistering transient fields and methods.... 
2016-07-21 09:11:46.441 INFO 67991 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : Post-processing complete 
2016-07-21 09:11:46.441 INFO 67991 --- [   main] o.neo4j.ogm.metadata.ClassFileProcessor : 0 classes loaded in 1829 milliseconds 

Obwohl die Debug-Protokolle zeigt, dass die ClassPathScanner die richtigen Klassen abtastet:

2016-07-21 09:35:40.099 DEBUG 68083 --- [   main] org.neo4j.ogm.scanner.ClassPathScanner : Scanning zipFile /private/tmp/spring-data-neo4j-demo/build/libs/spring-data-neo4j-example-0.0.1-SNAPSHOT.jar 
2016-07-21 09:35:40.101 DEBUG 68083 --- [   main] org.neo4j.ogm.scanner.ClassPathScanner : Scanning class entry: BOOT-INF/classes/org/sgh/configuration/Neo4jConfig.class 
2016-07-21 09:35:40.101 DEBUG 68083 --- [   main] org.neo4j.ogm.scanner.ClassPathScanner : Scanning class entry: BOOT-INF/classes/org/sgh/Controller/ExampleController.class 
2016-07-21 09:35:40.101 DEBUG 68083 --- [   main] org.neo4j.ogm.scanner.ClassPathScanner : Scanning class entry: BOOT-INF/classes/org/sgh/persistence/ExampleRepository.class 
2016-07-21 09:35:40.101 DEBUG 68083 --- [   main] org.neo4j.ogm.scanner.ClassPathScanner : Scanning class entry: BOOT-INF/classes/org/sgh/persistence/TreeEntity.class 
2016-07-21 09:35:40.101 DEBUG 68083 --- [   main] org.neo4j.ogm.scanner.ClassPathScanner : Scanning class entry: BOOT-INF/classes/org/sgh/service/ExampleService.class 
2016-07-21 09:35:40.101 DEBUG 68083 --- [   main] org.neo4j.ogm.scanner.ClassPathScanner : Scanning class entry: BOOT-INF/classes/org/sgh/SpringDataNeo4jExampleApplication.class 
2016-07-21 09:35:40.101 DEBUG 68083 --- [   main] org.neo4j.ogm.scanner.ClassPathScanner : Scanning zipped entry: BOOT-INF/lib/spring-test-4.3.1.RELEASE.jar 

ich ein minimales Demo-Projekt auf Github erstellt haben, um das Problem zu reproduzieren: Bauen Sie das Glas: https://github.com/sglahn/spring-data-neo4j-demo

Um das Problem zu gehen Sie wie folgt zu reproduzieren

Führen Sie das Glas:

java -Dspring.config.location=build/resources/main/ -jar build/libs/spring-data-neo4j-example-0.0.1-SNAPSHOT.jar 

Zugang der Controller im Browser:

http://localhost:8765/ 

Das Protokoll zeigt:

org.sgh.persistence.TreeEntity is not an instance of a persistable class 

Frühlings-Boot-Version ist 1.4.0. RC1

Antwort

1

Werfen Sie einen Blick auf the docs for Spring Boot 1.4.0.

Die Methode org.neo4j.ogm.metadata.DomainInfo#load scannt die "basePackages" der Domäne und lädt alle Domänenklassen. Wenn Sie Spring Boot 1.4.0 verwenden, um das JAR zu erstellen, ändert sich der Klassenpfad von "basePackages" zu boot-info/class/"basePackages", und org.neo4j.ogm.scanner.ClassPathScanner#scanClassFileEntry kann die Domäne-Klasse dann nicht verarbeiten.

Sie müssen daher zu Spring Boot 1.3 wechseln, um dieses Problem zu beheben.

+0

Ich benutze Spring Boot 1.3.5 und neo4j-Ogm 2.0.4 und habe das gleiche Problem. Kannst du erklären, wie genau das gelöst werden kann? Muss ich jetzt die Einstellung "basePackages" anpassen? – geld0r