Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

dependencies of dependency are not included

I have a java application that has some dependencies, among them another project with its own dependencies. Whenever I run it from Netbeans or with mvn exec is fine but when I try to package it, even though it's successfully built, at run time I get the following error:

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 the problem is that the sesame rio parsers seem not to be included even though I can see them in my maven repository. I include all the dependencies at the included project. I also tried to exclude them and explicitly add them to my main project and it again failed.

Any suggestions?

my dependencies tree:

[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
like image 463
user3732870 Avatar asked Jun 30 '14 07:06

user3732870


People also ask

Which is not a dependency scope in Maven?

Maven includes a dependency with this scope in the runtime and test classpaths, but not the compile classpath. This scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases. This scope is not transitive.


1 Answers

starting from your considerations I found a solution for building a fat-jar of my application including Sesame. I had to use another maven plugin, which is shade and the configuration for my build is as follows:

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

The most interesting parts are:

  • mainClass element: to specify the main
  • ServicesResourceTransformer: the core of our problem with sesame, which is the META-INF/services/ dir. This transformer helps in merging the dependancies services META-INF (as better explained in http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#ServicesResourceTransformer )
  • filters: to sign the jar (further details on: http://zhentao-li.blogspot.it/2012/06/maven-shade-plugin-invalid-signature.html )

Hope it helps. Cheers, Riccardo

like image 64
riccardo.tasso Avatar answered Sep 21 '22 14:09

riccardo.tasso