2014-06-30 4 views
8

Ich habe eine Java-Anwendung, die einige Abhängigkeiten hat, darunter ein anderes Projekt mit eigenen Abhängigkeiten. Jedes Mal, wenn ich laufe es von Netbeans oder mit mvn exec ist in Ordnung, aber wenn ich versuche, es zu verpacken, obwohl es erfolgreich integriert ist, zur Laufzeit bekomme ich folgende Fehlermeldung:Abhängigkeiten der Abhängigkeit sind nicht enthalten

Exception in thread "main" org.openrdf.rio.UnsupportedRDFormatException: No parser factory available for RDF format Turtle (mimeTypes=text/turtle, application/x-turtle; ext=ttl) 
    at org.openrdf.rio.Rio.createParser(Rio.java:198) 
    at org.openrdf.rio.Rio.createParser(Rio.java:213) 
    at org.openrdf.repository.util.RDFLoader.loadInputStreamOrReader(RDFLoader.java:318) 
    at org.openrdf.repository.util.RDFLoader.load(RDFLoader.java:222) 
    at org.openrdf.repository.util.RDFLoader.load(RDFLoader.java:104) 
    at org.openrdf.repository.base.RepositoryConnectionBase.add(RepositoryConnectionBase.java:217) 
    at net.antidot.semantic.rdf.model.impl.sesame.SesameDataSet.loadDataFromFile(SesameDataSet.java:160) 

so das Problem ist, dass der Sesam rio Parser scheinen nicht enthalten zu sein, obwohl ich sie in meinem Maven-Repository sehen kann. Ich schließe alle Abhängigkeiten in das enthaltene Projekt ein. Ich habe auch versucht, sie auszuschließen und explizit zu meinem Hauptprojekt hinzufügen und es ist erneut fehlgeschlagen.

Irgendwelche Vorschläge?

meine Abhängigkeiten Baum:

[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ RMLMapper --- 
[INFO] be.ugent.mmlab:RMLMapper:jar:0.1 
[INFO] +- junit:junit:jar:4.11:test 
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test 
[INFO] +- xom:xom:jar:1.2.5:compile 
[INFO] | +- xml-apis:xml-apis:jar:1.3.03:compile 
[INFO] | +- xerces:xercesImpl:jar:2.8.0:compile 
[INFO] | \- xalan:xalan:jar:2.7.0:compile 
[INFO] +- jlibs:jlibs-xmldog:jar:1.0:compile 
[INFO] | +- jlibs:jlibs-xml:jar:1.0:compile 
[INFO] | | +- jlibs:jlibs-core:jar:1.0:compile 
[INFO] | | \- jlibs:jlibs-nbp:jar:1.0:compile 
[INFO] | \- jaxen:jaxen:jar:1.1.1:compile 
[INFO] +- com.jayway.jsonpath:json-path:jar:0.8.1:compile 
[INFO] | +- net.minidev:json-smart:jar:1.1.1:compile 
[INFO] | \- commons-lang:commons-lang:jar:2.6:compile 
[INFO] +- com.jayway.jsonpath:json-path-assert:jar:0.9.1:test 
[INFO] | \- org.hamcrest:hamcrest-library:jar:1.3:test 
[INFO] +- net.antidot:db2triples:jar:1.0.2:compile 
[INFO] | +- commons-logging:commons-logging:jar:1.1.2:compile 
[INFO] | +- mysql:mysql-connector-java:jar:5.1.25:compile 
[INFO] | +- postgresql:postgresql:jar:9.1-901.jdbc4:compile 
[INFO] | \- org.slf4j:slf4j-simple:jar:1.6.1:runtime 
[INFO] +- org.openrdf.sesame:sesame-runtime:jar:2.7.12:compile 
[INFO] | +- org.openrdf.sesame:sesame-model:jar:2.7.12:compile 
[INFO] | +- org.openrdf.sesame:sesame-repository-api:jar:2.7.12:compile 
[INFO] | +- org.openrdf.sesame:sesame-repository-manager:jar:2.7.12:compile 
[INFO] | | +- org.openrdf.sesame:sesame-repository-event:jar:2.7.12:compile 
[INFO] | | +- org.openrdf.sesame:sesame-sail-memory:jar:2.7.12:compile 
[INFO] | | +- org.openrdf.sesame:sesame-http-client:jar:2.7.12:compile 
[INFO] | | | \- commons-httpclient:commons-httpclient:jar:3.1:compile 
[INFO] | | \- org.openrdf.sesame:sesame-http-protocol:jar:2.7.12:compile 
[INFO] | +- org.openrdf.sesame:sesame-repository-http:jar:2.7.12:compile 
[INFO] | | +- org.openrdf.sesame:sesame-queryparser-api:jar:2.7.12:compile 
[INFO] | | \- org.openrdf.sesame:sesame-queryresultio-api:jar:2.7.12:compile 
[INFO] | +- org.openrdf.sesame:sesame-repository-sparql:jar:2.7.12:compile 
[INFO] | | +- org.openrdf.sesame:sesame-queryparser-sparql:jar:2.7.12:compile 
[INFO] | | \- org.openrdf.sesame:sesame-queryresultio-sparqlxml:jar:2.7.12:compile 
[INFO] | +- org.openrdf.sesame:sesame-repository-contextaware:jar:2.7.12:compile 
[INFO] | +- org.openrdf.sesame:sesame-repository-sail:jar:2.7.12:compile 
[INFO] | | \- org.openrdf.sesame:sesame-rio-trig:jar:2.7.12:compile 
[INFO] | +- org.openrdf.sesame:sesame-sail-api:jar:2.7.12:compile 
[INFO] | +- org.openrdf.sesame:sesame-sail-federation:jar:2.7.12:compile 
[INFO] | +- org.slf4j:slf4j-api:jar:1.6.1:compile 
[INFO] | +- org.openrdf.sesame:sesame-queryparser-serql:jar:2.7.12:runtime 
[INFO] | +- org.openrdf.sesame:sesame-queryresultio-binary:jar:2.7.12:runtime 
[INFO] | +- org.openrdf.sesame:sesame-queryresultio-sparqljson:jar:2.7.12:runtime 
[INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.2.1:runtime 
[INFO] | +- org.openrdf.sesame:sesame-queryresultio-text:jar:2.7.12:runtime 
[INFO] | | \- net.sf.opencsv:opencsv:jar:2.0:runtime 
[INFO] | +- org.openrdf.sesame:sesame-repository-dataset:jar:2.7.12:runtime 
[INFO] | +- org.openrdf.sesame:sesame-rio-languages:jar:2.7.12:runtime 
[INFO] | +- org.openrdf.sesame:sesame-rio-binary:jar:2.7.12:runtime 
[INFO] | +- org.openrdf.sesame:sesame-rio-nquads:jar:2.7.12:runtime 
[INFO] | +- org.openrdf.sesame:sesame-rio-n3:jar:2.7.12:runtime 
[INFO] | +- org.openrdf.sesame:sesame-rio-rdfjson:jar:2.7.12:runtime 
[INFO] | +- org.openrdf.sesame:sesame-rio-rdfxml:jar:2.7.12:runtime 
[INFO] | +- org.openrdf.sesame:sesame-rio-trix:jar:2.7.12:runtime 
[INFO] | \- org.openrdf.sesame:sesame-sail-rdbms:jar:2.7.12:runtime 
[INFO] |  \- commons-dbcp:commons-dbcp:jar:1.3:runtime 
[INFO] |  \- commons-pool:commons-pool:jar:1.5.4:runtime 
[INFO] +- org.openrdf.sesame:sesame-sail-nativerdf:jar:2.7.12:compile 
[INFO] | +- org.openrdf.sesame:sesame-sail-inferencer:jar:2.7.12:compile 
[INFO] | +- org.openrdf.sesame:sesame-queryalgebra-evaluation:jar:2.7.12:compile 
[INFO] | +- org.openrdf.sesame:sesame-queryalgebra-model:jar:2.7.12:compile 
[INFO] | +- org.openrdf.sesame:sesame-query:jar:2.7.12:compile 
[INFO] | \- org.openrdf.sesame:sesame-util:jar:2.7.12:compile 
[INFO] +- com.sun.org.apache:jaxp-ri:jar:1.4:compile 
[INFO] | \- javax.xml.parsers:jaxp-api:jar:1.4:compile 
[INFO] +- net.sourceforge.javacsv:javacsv:jar:2.0:compile 
[INFO] +- commons-io:commons-io:jar:1.3.2:compile 
[INFO] +- net.sf.saxon:Saxon-HE:jar:compressed:9.5.1-4:compile 
[INFO] +- org.jodd:jodd-lagarto:jar:3.5:compile 
[INFO] | +- org.jodd:jodd-log:jar:3.5:compile 
[INFO] | \- org.jodd:jodd-core:jar:3.5:compile 
[INFO] +- org.jsoup:jsoup:jar:1.7.3:compile 
[INFO] +- org.apache.httpcomponents:httpclient:jar:4.2.2:compile 
[INFO] | +- org.apache.httpcomponents:httpcore:jar:4.2.2:compile 
[INFO] | \- commons-codec:commons-codec:jar:1.6:compile 
[INFO] +- com.github.fge:uri-template:jar:0.9:compile 
[INFO] | +- com.github.fge:msg-simple:jar:1.1:compile 
[INFO] | | \- com.github.fge:btf:jar:1.2:compile 
[INFO] | +- com.google.guava:guava:jar:16.0.1:compile 
[INFO] | \- com.google.code.findbugs:jsr305:jar:2.0.1:compile 
[INFO] +- org.openrdf.sesame:sesame-rio-api:jar:2.7.12:compile 
[INFO] +- org.openrdf.sesame:sesame-rio-datatypes:jar:2.7.12:compile 
[INFO] +- org.openrdf.sesame:sesame-rio-turtle:jar:2.7.12:compile 
[INFO] +- org.openrdf.sesame:sesame-rio-ntriples:jar:2.7.12:compile 
[INFO] +- org.openrdf.sesame:sesame-rio-n3:pom:2.7.12:compile 
[INFO] +- org.openrdf.sesame:sesame-rio:pom:2.7.12:compile 
[INFO] \- commons-cli:commons-cli:jar:1.2:compile 
+0

vielleicht, dass Fabrik fehlt eine optionale Abhängigkeit ist und in einer der Abhängigkeiten gefunden Umfang Laufzeit haben: org.openrdf.sesame: Sesam-queryparser-serql: jar: 2.7.12: Laufzeit - in der Regel IDE unterscheiden Sie nicht so sehr, welche Gläser dem Klassenpfad hinzugefügt werden sollen - sie fügen einfach alle hinzu, um sicher zu sein. In welchem ​​Glas ist diese Fabrik? Und ist das Glas in der Bereitstellung? – wemu

+0

Wie verpacken Sie? Lassen Sie die Originalgläser intakt? Grund dafür ist, dass Sesame für seine Parser SPI und ServiceLoaders verwendet, die bestimmte Metadaten im Jar benötigen. –

+0

Ich benutze das Maven-Assembly-Plugin mit JAR-mit-Abhängigkeiten, wenn das Ihre Frage Wemu beantwortet. Ich mache nichts besonderes, um die Gläser zu wechseln. Ich füge nur die Plugins in meine Pom-Datei ein. Ich sehe folgendes in meiner JAR-Datei, also nehme ich an, dass die Abhängigkeit (gut) enthalten ist: org/openrdf/rio/turtle/ org/openrdf/rio/turtle/TurtleParser.Klasse org/openrdf/rio/Schildkröte/TurtleParserFactory.class .... INF/maven/org.openrdf.same/sesam-rio-turtle/ INF/maven/org.openrdf.same/sesame-rio- turtle/pom.xml INF/maven/org.openrdf.same/sesame-rio-turtle/pom.properties – user3732870

Antwort

10

Ausgehend von Ihren Überlegungen fand ich eine Lösung für den Aufbau eines Fettrahmens meiner Anwendung einschließlich Sesam. Ich hatte ein anderes Maven Plugin zu verwenden, die Schatten und die Konfiguration für meine Build ist wie folgt:

<build> 
<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>2.3</version> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>shade</goal> 
     </goals> 
     <configuration> 
      <transformers> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
       <mainClass>my.package.main.MyMain</mainClass> 
      </transformer> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> 
      </transformers> 
      <filters> 
      <filter> 
       <artifact>*:*</artifact> 
       <excludes> 
       <exclude>META-INF/*.SF</exclude> 
       <exclude>META-INF/*.DSA</exclude> 
       <exclude>META-INF/*.RSA</exclude> 
       </excludes> 
      </filter> 
      </filters> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 
</build> 

Die interessantesten Teile sind:

Hoffe, es hilft: das Glas (http://zhentao-li.blogspot.it/2012/06/maven-shade-plugin-invalid-signature.html weitere Einzelheiten zu) zu unterzeichnen. Cheers, Riccardo

+2

Es funktioniert auch wie ein Zauber für mich, vielen Dank für die Lösung! – user3732870

+0

Ich habe gerade festgestellt, dass Sie diese Lösung gefunden haben, ich habe meine eigene Antwort aktualisiert, bevor ich wusste. +1 auf Ihrem, um zuerst dorthin zu kommen (und die aktuelle Konfiguration anzuzeigen). –

3

Das Problem ist, dass Sie die Sesam Gläser falsch sind Umpacken. Mavens jar-with-dependencies Ziel entpackt Drittanbieter-Jars, um den Inhalt in ein einziges großes Projekt-Jar zu legen. Das wird nicht mit den Sesam-Bibliotheken funktionieren - Sie müssen die Original-Gläser intakt mit den META-INF/services/ Dirs an Ort und Stelle.

aktualisieren Statt eine onejar mit 'jar-with-Abhängigkeiten' hergestellt werden, können Sie die Maven Shade plugin verwenden, die specific config options mit der Zusammenführung der META-INF/services Verzeichnisse richtig zu tun hat.

+0

Wie funktioniert das nicht mit Sesame, d. H. In welcher Hinsicht ist es anders? –

+0

Würden Sie vielleicht auch wissen, wie Sie das ohne Umpacken tun können? Ist es überhaupt möglich, für ein Projekt, das Sesam verwendet, ein einziges Glas zu erstellen? Soll man den Ordner META-INF/services/'manuell hinzufügen? –

+2

Dies ist nicht spezifisch für Sesame - jar repackaging funktioniert nicht richtig für _any_ java-Bibliothek, die SPI/ServiceLoader-Funktionalität verwendet. Das Problem besteht darin, dass die Registrierung des SPI-Dienstes über eine Textdatei im Ordner META-INF/services erfolgt und diese Textdateien beim Neupacken verloren gehen. Da verschiedene Dateien Dateien mit exakt demselben Namen enthalten, ist eine manuelle Korrektur möglich, aber nicht einfach, da Sie die Dateien nicht einfach kopieren können. Stattdessen müssen Sie ihre Inhalte zusammenführen. –

Verwandte Themen