2016-03-28 105 views
1

的Neo4j社區2.3.3的Linux(Ubuntu的14.04)Neo4j的「不依賴型滿足類org.neo4j.kernel.api.index.SchemaIndexProvider」

試圖運行Java應用程序消耗卡夫卡的話題,它的過程同時查詢Neo4j,並將它們寫入另一個Kafka主題。

[email protected]:~$ java -jar gradle1-0.1.0.jar localhost:9092 musicgrp raw-events enriched-events bad-events /home/ubuntu/GeoLiteCity.dat 
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Exception in thread "main" java.lang.RuntimeException: Error starting org.neo4j.kernel.impl.factory.CommunityFacadeFactory, /home/hduser/neo4jdb2/data/graph.db 
    at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.newFacade(GraphDatabaseFacadeFactory.java:143) 
    at org.neo4j.kernel.impl.factory.CommunityFacadeFactory.newFacade(CommunityFacadeFactory.java:43) 
    at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.newFacade(GraphDatabaseFacadeFactory.java:108) 
    at org.neo4j.graphdb.factory.GraphDatabaseFactory.newDatabase(GraphDatabaseFactory.java:129) 
    at org.neo4j.graphdb.factory.GraphDatabaseFactory$1.newDatabase(GraphDatabaseFactory.java:117) 
    at org.neo4j.graphdb.factory.GraphDatabaseBuilder.newGraphDatabase(GraphDatabaseBuilder.java:185) 
    at music.StreamApp.main(StreamApp.java:40) 
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component '[email protected]' was successfully initialized, but failed to start. Please see attached cause exception. 
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:462) 
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:111) 
    at org.neo4j.kernel.impl.transaction.state.DataSourceManager.start(DataSourceManager.java:112) 
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:452) 
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:111) 
    at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.newFacade(GraphDatabaseFacadeFactory.java:139) 
    ... 6 more 
Caused by: org.neo4j.kernel.impl.util.UnsatisfiedDependencyException: No dependency satisfies type class org.neo4j.kernel.api.index.SchemaIndexProvider 
    at org.neo4j.kernel.impl.util.Dependencies.resolveDependency(Dependencies.java:78) 
    at org.neo4j.kernel.impl.util.Dependencies.resolveDependency(Dependencies.java:74) 
    at org.neo4j.kernel.NeoStoreDataSource.start(NeoStoreDataSource.java:507) 
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:452) 
    ... 11 more 

這是我gradle.build,我讀了一些關於後保持的Neo4j罐子出來的包......由指向它的罐子--classpath ...我是新來的搖籃,這是相關?

apply plugin: 'java' 
apply plugin: 'application' 
sourceCompatibility = '1.8' 
mainClassName = 'music.StreamApp' 
repositories { 
    mavenCentral() 
} 
version = '0.1.0' 
dependencies { 
    compile 'org.apache.kafka:kafka-clients:0.9.0.0' 
    compile 'com.maxmind.geoip:geoip-api:1.2.14' 
    compile 'com.fasterxml.jackson.core:jackson-databind:2.6.3' 
    compile 'org.slf4j:slf4j-api:1.7.5' 
    compile 'org.neo4j:neo4j:2.3.3' 
} 
jar { // c 
manifest { 
    attributes 'Main-Class': mainClassName 
} 
from { 
    configurations.compile.collect { 
     it.isDirectory() ? it : zipTree(it) 
    } 
} { 
    exclude "META-INF/*.SF" 
    exclude "META-INF/*.DSA" 
    exclude "META-INF/*.RSA" 
} 
} 

回答

2

我懷疑你的jar中沒有正確的META-INF/services/org.neo4j.kernel.extension.KernelExtensionFactory文件。內部Neo4j使用JVM的ServiceLoader來加載其組件。

查看https://github.com/neo4j/neo4j/blob/2.3/community/lucene-index/src/main/resources/META-INF/services/org.neo4j.kernel.extension.KernelExtensionFactory可能缺失的部分。

我認爲正確的解決方法不是改變Gradle的默認jar任務,而是使用正確處理META-INF文件的插件。我用shadow plugin做了一些很好的體驗。

+1

是的,主索引提供程序位於neo4j-lucene-index jar中,因此請確保它包含在類路徑中 –

+0

TEST1:在./src下手動添加META-INF/services/org.neo4j.kernel.extension.KernelExtensionFactory /主/ JAVA;在'dependencies {}'和'from('./src/main/java'){include'META-INF/services/org。'中添加'compile'org.neo4j:neo4j-lucene-index:2.3.3' 'jar {}'中的neo4j.kernel.extension.KernelExtensionFactory'}';運行gradle jar。結果:同一個錯誤。 – guzu92

+0

TEST2:TEST1 +影子插件,增加了'插件{'''' id'application' id'com.github.johnrengelman.shadow'version'1.2.3' }';運行gradle shadowJar。結果:成功! – guzu92

2

在我的情況(Neo4j的shell工具3.0.3,搖籃2.13),加入mergeServiceFiles()是解決這一問題的關鍵在於:

plugins { id "com.github.johnrengelman.shadow" version "1.2.3" } 

shadowJar { 
    classifier = 'fat' 
    mergeServiceFiles() 
    manifest { attributes 'Main-Class': '...' } 
} 

沒有必要指定的確切文件(META-INF/...)。

+0

我真的需要在我的情況下,很好!但是,我必須遵循https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow中概述的語法才能運行 – flq

相關問題