2014-06-30 20 views
8

Mam aplikację java, która ma pewne zależności, między innymi inny projekt z własnymi zależnościami. Ilekroć go uruchomić z Netbeans lub mvn exec jest w porządku, ale gdy próbuję go zapakować, mimo to udało się stworzyć, w czasie wykonywania pojawia się następujący błąd:zależności zależności nie są zawarte

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) 

więc problem jest taki, że rio sezam parsery nie są uwzględniane, mimo że widzę je w moim repozytorium. Zawieram wszystkie zależności w dołączonym projekcie. Próbowałem również je wykluczyć i wyraźnie dodać je do mojego głównego projektu i znowu się nie udało.

Wszelkie sugestie?

moje drzewo zależności:

[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

może, że brakuje fabryki jest opcjonalna zależność i znalazł się w jednej z zależnościami, które mają zakres wykonywania: org.openrdf.sesame: Sezam-queryparser-serql: słoik: 2.7.12: Runtime - zwykle IDE nie rozróżniaj tego, które słoiki dodają do ścieżki klas - po prostu dodają wszystkie, aby były bezpieczne. W którym słoju jest ta fabryka? I czy ten słoik jest w instalacji? – wemu

+0

Jak się pakujesz? Czy pozostawiasz oryginalne słoiki w stanie nienaruszonym? Powód, o który pytam, to fakt, że Sesame używa SPI i ServiceLoaders dla swoich parserów, które wymagają obecności pewnych metadanych w słoiku. –

+0

Używam wtyczki maven-assembly z słoikami zależnymi, jeśli to odpowie na twoje pytanie Wemu. Nie robię nic, aby zmienić słoiki. Załączam tylko wtyczki do mojego pliku pom. Widzę następujące w moim pliku jar, więc zakładam, że zależność jest (dobrze) włączone: org/openrdf/rio/turtle/ org/openrdf/rio/turtle/TurtleParser.klasa org/openrdf/rio/turtle/TurtleParserFactory.class .... INF/maven/org.openrdf.sesame/sesame-rio-turtle/ INF/maven/org.openrdf.sesame/sesame-rio- żółw/pom.xml INF/maven/org.openrdf.sesame/sesame-rio-turtle/pom.properties – user3732870

Odpowiedz

10

Zaczynając od twoich rozważań znalazłem rozwiązanie do budowania słoika z moją aplikacją, w tym Sezamu. Musiałem użyć innej wtyczki maven, który jest odcień i konfiguracja dla mojego kompilacji jest następujący:

<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> 

Najciekawsze elementy to:

nadzieję, że to pomaga. Cheers, Riccardo

+2

To działa również dla mnie jak urok, wielkie dzięki za udostępnienie rozwiązania! – user3732870

+0

Właśnie zauważyłem, że znalazłeś to rozwiązanie, zaktualizowałem własną odpowiedź, zanim zdałem sobie sprawę. +1 na twoje, żeby się tam dostać pierwszy (i pokazujący aktualną konfigurację). –

3

Problemem jest to, że są nieprawidłowo przepakowania słoiki sezamu. Cel Mavena o numerze jar-with-dependencies rozpakowuje słoiki stron trzecich, aby umieścić zawartość w jednym dużym słoju projektu. To nie zadziała z bibliotekami Sezamowymi - potrzebujesz oryginalnych słoików z zainstalowanymi katalogami META-INF/services/.

Aktualizacja Zamiast wytwarzania onejar z „Jar-z-zależnościami”, można użyć Maven Shade plugin, który ma do czynienia z specific config options scalenie META-INF/services katalogów poprawnie.

+0

Dlaczego to nie działa z Sezamem, tzn. Pod jakim względem jest inny? –

+0

Być może wiesz, jak to zrobić bez przepakowywania? Czy jest to możliwe, aby utworzyć pojedynczy słoik dla projektu używającego Sezamu? Czy należy ręcznie dodać folder 'META-INF/services /'? –

+2

To nie jest specyficzne dla Sesame - przepakowywanie słoików nie działa poprawnie w bibliotece _any_ java, która używa funkcji SPI/ServiceLoader. Problem polega na tym, że rejestracja usługi SPI odbywa się za pośrednictwem pliku tekstowego w folderze META-INF/services, a te pliki tekstowe giną podczas przepakowywania. Ponieważ różne słoiki zawierają pliki o dokładnie takiej samej nazwie, ręczne naprawianie jest możliwe, ale nie jest łatwe, ponieważ nie można po prostu skopiować plików. Zamiast tego musisz scalić ich zawartość. –