-->

耶拿的NoClassDefFoundError使用Maven(Jena NoClassDefFoun

2019-09-16 13:43发布

我有我前一阵子发展,不工作了一个Java Maven项目。 它一起使用父POM与另一个Maven项目中,我认为耶拿版本改变,它也采用了使用耶拿外部库。 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:组织/阿帕奇/耶拿/ 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降级耶拿版本,或者我能做些什么吗?

PS:我现在有能重现误差最小的代码示例(java.lang.NoClassDefFoundError:组织/阿帕奇/耶拿/ 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>

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

PS:我注意到,我有依赖关系“耶拿”,“ARQ”和“耶拿-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>

所以我想,也许我有太多重叠的依赖关系,并注释掉“耶拿”和“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-孵化,但我仍然得到NoClassDefFoundError的使用和不使用“耶拿”和“ARQ” -dependencies。

PPS:

我仍然得到同样的错误,即使我用下面的依赖关系:

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

Answer 1:

您可以搜索使用Maven的中央搜索应用程序缺少类

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

这表明,你似乎缺少的依赖是:

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

似乎没有成为一个2.6.4版本,但你最好probabily建议去一个更现代的版本(该项目于近日捐赠给Apache的)



Answer 2:

说明使用Apache耶拿与Maven在这里:

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

指定ARQ 2.9.0作为您的项目依赖pom.xml将在您需要的其他组件耶拿拉。



Answer 3:

我终于通过排除“耶拿” -Dependency带来了来自一些库中的传递依赖解决了这个错误。



文章来源: Jena NoClassDefFoundError with Maven