Jena NoClassDefFoundError with Maven

旧城冷巷雨未停 提交于 2019-12-23 05:23:47

问题


I have a Java Maven project that I developed a while ago and that doesn't work anymore. It uses a parent pom together with another Maven project in which I think the Jena version was changed and it also uses an external library that uses Jena. The Maven dependency is:

<dependency>
 <groupId>com.hp.hpl.jena</groupId>
 <artifactId>jena</artifactId>
 <version>2.6.4</version>
</dependency>

When I execute my tests I get the following errors:

  • java.lang.NoClassDefFoundError: Could not initialize class com.hp.hpl.jena.query.ARQ
  • java.lang.NoClassDefFoundError: org/apache/jena/iri/IRIFactory at org.openjena.riot.system.PrefixMap.add(PrefixMap.java:54) at com.hp.hpl.jena.sparql.util.MappingRegistry.addPrefixMapping(MappingRegistry.java:33) at com.hp.hpl.jena.query.ARQ.init(ARQ.java:449) [...]

The errors are not thrown by my code directly but by the library I include. Can I prevent this by downgrading the Jena version in the parent pom or what can I do here?

P.S.: I now have a minimal code example that reproduces the error (java.lang.NoClassDefFoundError: org/apache/jena/iri/IRIFactory):

import org.junit.Test;
import com.hp.hpl.jena.query.ARQ;

public class DependencyTest
{
    @Test
    public void testARQ()
    {
        ARQ a = new ARQ();      
    }   
}

And I guess it comes from this dependency:

<dependency>
  <groupId>org.apache.jena</groupId>
  <artifactId>jena-arq</artifactId>
  <version>2.9.1-incubating-SNAPSHOT</version>
</dependency>

I know there is probably a factory instead of a constructor but I guess this still shows where the problem is.

P.S.: I noticed that I had the dependencies "jena", "arq" and "jena-arq":

<dependency>
 <groupId>com.hp.hpl.jena</groupId>
 <artifactId>arq</artifactId>
 <version>2.8.8</version>
</dependency>

<dependency>
 <groupId>org.apache.jena</groupId>
 <artifactId>jena-arq</artifactId>
 <version>2.9.1-incubating-SNAPSHOT</version>
</dependency>

 dependency>
 <groupId>com.hp.hpl.jena</groupId>
 <artifactId>jena</artifactId>
 <version>2.6.4</version>
</dependency>

So I thought maybe I have too much overlapping dependencies and commented out "jena" and "arq". But I still get the error

java.lang.NoClassDefFoundError: Could not initialize class com.hp.hpl.jena.query.ARQ
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.<init> [...]

I also tried out forcing a non-snapshot-version 2.9.0-incubating, but then I still get the NoClassDefFoundError with and without using the "jena" and "arq"-dependencies.

P.P.S.:

I still get the same error even when I use the following dependencies:

 <dependency>
  <groupId>org.apache.jena</groupId>
  <artifactId>jena-arq</artifactId>
 <version>2.9.0-incubating</version>
</dependency>

<dependency>
  <groupId>org.apache.jena</groupId>
  <artifactId>jena-core</artifactId>
 <version>2.7.0-incubating</version>
</dependency>

<dependency>
  <groupId>org.apache.jena</groupId>
  <artifactId>jena-iri</artifactId>
 <version>2.7.0-incubating</version>
</dependency>

回答1:


You can search for the missing class using the Maven Central search application

  • http://search.maven.org/#search|ga|1|fc%3A%22com.hp.hpl.jena.query.ARQ%22

It demonstrates that the dependency you appear to be missing is:

<dependency>
    <groupId>com.hp.hpl.jena</groupId>
    <artifactId>arq</artifactId>
    <version>2.6.0</version>
</dependency>

Doesn't appear to be a version 2.6.4, but you're probabily best advised to go for a more modern version (This project was recently donated to apache)




回答2:


Instructions for using Apache Jena with Maven are here:

incubator.apache.org/jena/download/maven.html

Specifying ARQ 2.9.0 as a dependency in your project pom.xml will pull in the other Jena components that you need.




回答3:


I finally resolved this error by excluding the "jena"-Dependency brought in as a transitive dependency from some library.



来源:https://stackoverflow.com/questions/10177100/jena-noclassdeffounderror-with-maven

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!