2016-07-21 10 views
3

私はSpring Data Neo4jを使用するSpring Bootプロジェクトを持っています。 IDE(Intellij)からプロジェクトを実行すると、すべて正常に動作します。コマンドラインからプロジェクトを実行すると(java -jar ...)、エンティティが永続クラスのインスタンスではないというメッセージが表示されます。SpringデータNeo4j ClassFileProcessorはクラスをロードしません

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

そして、私は、メインクラスを注釈を付けています:

私はSessionFactoryのにbasePackagesを渡す

のIntelliJから起動する場合:

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

情報ログには、次を示し:

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 
コマンドラインから起動

:私は、問題を再現するためのGithub上の最小限のデモプロジェクトを作成している

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 

:デバッグログが、

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 

はClassPathScannerが正しいクラスをスキャンしていることを示しています。 https://github.com/sglahn/spring-data-neo4j-demo

次の操作を行い、問題を再現する: jarファイルをビルドします。

./gradlew build 

jarファイルを実行します。

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

アクセスブラウザでコントローラ:

http://localhost:8765/ 

をログが示しています

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

春ブートバージョンは1.4.0です。 RC1

答えて

1

the docs for Spring Boot 1.4.0を見てください。

メソッドorg.neo4j.ogm.metadata.DomainInfo#loadは、ドメインの"basePackages"をスキャンし、すべてのドメインクラスを読み込みます。 Springブート1.4.0を使用してjarをビルドすると、 "basePackages"のクラスパスはboot-info/class/"basePackages"に変更され、org.neo4j.ogm.scanner.ClassPathScanner#scanClassFileEntryはドメインクラスを処理できません。

この問題を解決するには、Springブート1.3に変更する必要があります。

+0

私はSpring Boot 1.3.5とneo4j-ogm 2.0.4を使用していますが、同じ問題に直面しています。どのようにこれを解決できるのか説明できますか? "basePackages"設定を調整する必要がありますか? – geld0r

関連する問題