使用Maven的Jena NoClassDefFoundError

时间:2012-04-16 15:29:49

标签: java maven noclassdeffounderror jena

我有一个我之前开发的Java Maven项目,它不再起作用了。它使用父pom和另一个Maven项目,其中我认为Jena版本已更改,它还使用了使用Jena的外部库。 Maven的依赖是:

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

当我执行测试时,我收到以下错误:

  • java.lang.NoClassDefFoundError:无法初始化类 com.hp.hpl.jena.query.ARQ
  • java.lang.NoClassDefFoundError:org / apache / jena / iri / IRIFactory 在org.openjena.riot.system.PrefixMap.add(PrefixMap.java:54) 在com.hp.hpl.jena.sparql.util.MappingRegistry.addPrefixMapping(MappingRegistry.java:33) 在com.hp.hpl.jena.query.ARQ.init(ARQ.java:449)[...]

我的代码没有直接抛出错误,而是我包含的库。我可以通过降级父pom中的Jena版本来防止这种情况,或者我可以在这做什么?

P.S。:我现在有一个重现错误的最小代码示例(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();      
    }   
}

我猜它来自这种依赖:

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

我知道可能有一个工厂而不是一个构造函数,但我想这仍然显示出问题所在。

P.S。:我注意到我有依赖“jena”,“arq”和“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>

所以我想也许我有太多重叠的依赖关系,并注释掉了“jena”和“arq”。但我仍然得到错误

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

我也试过强制非快照版本2.9.0孵化,但是在使用和不使用“jena”和“arq”-dependencies时我仍然得到NoClassDefFoundError。

P.P.S:

即使我使用以下依赖项,我仍然会遇到相同的错误:

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

3 个答案:

答案 0 :(得分:1)

您可以使用Maven Central搜索应用程序搜索缺少的课程

它表明您看起来缺少的依赖关系是:

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

似乎不是2.6.4版本,但你可能最好建议使用更现代的版本(这个项目最近被捐赠给了apache)

答案 1 :(得分:1)

将Apache Jena与Maven一起使用的说明如下:

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

将ARQ 2.9.0指定为项目pom.xml中的依赖项将引入您需要的其他Jena组件。

答案 2 :(得分:0)

我最终通过排除“jena” - 从某些库中作为传递依赖引入的依赖来解决了这个错误。