2016-06-28 7 views
0

Ich habe etwas Code geschrieben, der RDF manipuliert, und ist so abhängig von der jena framework. Ich versuche es mit Maven zu kompilieren/zu packen. Die Zusammenstellung abgeschlossen ist, aber wenn ich die erzeugte JAR-Datei versuchen und laufen, erhalte ich:Kompilieren einer Klasse, die von jena abhängt

Exception in thread "main" java.lang.ExceptionInInitializerError 
    at my.package.name.ClassName.<clinit>(SchemaAPI.java:96) 
Caused by: java.lang.NullPointerException 
    at org.apache.jena.tdb.sys.EnvTDB.processGlobalSystemProperties(EnvTDB.java:33) 
    at org.apache.jena.tdb.TDB.init(TDB.java:250) 
    at org.apache.jena.tdb.sys.InitTDB.start(InitTDB.java:29) 
    at org.apache.jena.system.JenaSystem.lambda$init$40(JenaSystem.java:114) 
    at java.util.ArrayList.forEach(ArrayList.java:1249) 
    at org.apache.jena.system.JenaSystem.forEach(JenaSystem.java:179) 
    at org.apache.jena.system.JenaSystem.forEach(JenaSystem.java:156) 
    at org.apache.jena.system.JenaSystem.init(JenaSystem.java:111) 
    at org.apache.jena. 

Dies hat vor (zB here und here) diskutiert worden, aber ich habe meine pom-Datei geändert, um die Schatten-Plugin enthalten - und das hat das Problem nicht gelöst, und ich habe ein bisschen von einem Brickwall getroffen ...

Basierend auf den Kommentaren in den Diskussionen in den obigen Links habe ich meine META-INF/services/org.apache.jena.system.JenaSubsystemLifecycle Datei in meiner my-project-0.1-jar-with-dependencies.jar Datei überprüft und es tut in der Tat enthalten den Verweis auf TDB (org.apache.jena.tdb.sys.InitTDB) - so weiß ich, dass dies (fast sicher) die Ursache des Problems ist, aber ich bin nicht näher an der Suche nach einer Lösung ...

Ich nehme auch die maven-dependency-plugin und die maven-compiler-plugin - ich nehme an, diese werden keinen Konflikt verursachen?

Weitere Informationen

einige zusätzliche Informationen als Antwort auf Andy S Kommentar. Der relevante Teil meiner pom-Datei ist:

<transformers> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
    <mainClass>uk.co.domain.mypackage.MyClass</mainClass> 
    </transformer> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" /> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer" /> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer"> 
    <addHeader>false</addHeader> 
    </transformer> 
</transformers> 

Die entsprechende Datei in META-INF enthält nur eine Klasse:

$more META-INF/services/org.apache.jena.system.JenaSubsystemLifecycle 
org.apache.jena.tdb.sys.InitTDB 
$ 

ich auch das Hinzufügen versucht haben

JenaSystem.init(); 

am Anfang meine Hauptklasse, aber das hat nicht geholfen

+0

Haben Sie eine Github Repo oder etwas, wo Sie den Code haben, den Sie versuchen zu laufen? – Ulises

+0

Warum verwenden Sie nicht eine bestimmte Version von maven central, anstatt sie zu erstellen? –

+0

@Ulises nein, sorry (Firmenpolitik über keinen Code freizugeben ...: /) - Ich könnte versuchen, ein (relativ) minimales Beispiel zu machen, aber wollte zuerst überprüfen, dass es wahrscheinlich kein offensichtlicher Fehler ist, der ich bin machen – ChrisW

Antwort

0

Es ist kein Klassenpfad Problem, es ist eithe R ein Missbrauch oder ein Fehlkonfigurationsproblem. Grundsätzlich erhalten Sie eine Nullzeigerausnahme at line 33 of EnvTDB, speziell TDB.getContext() gibt null zurück. Vielleicht versuchen Sie es zuerst:

+0

Entschuldigung - das hat es nicht gelöst ... – ChrisW

+0

Versuchen Sie, es zu debuggen, herauszufinden, wo es scheitert. –

+0

Der Fehler ist der gleiche wie in meiner ursprünglichen Frage - ich bin nicht wirklich sicher, wie man es überhaupt zu debuggen anfängt, da es damit zu tun hat, wie maven Pakete externe Gläser verpackt – ChrisW

Verwandte Themen