【问题标题】:Jena NoClassDefFoundError with MavenJena NoClassDefFoundError 与 Maven
【发布时间】:2012-04-16 15:29:49
【问题描述】:

我有一个不久前开发的 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-incubating,但在使用和不使用“jena”和“arq”依赖项的情况下,我仍然得到 NoClassDefFoundError。

附:

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

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

【问题讨论】:

    标签: java maven noclassdeffounderror jena


    【解决方案1】:

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

    这表明您似乎缺少的依赖项是:

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

    似乎不是 2.6.4 版本,但最好建议您使用更现代的版本(该项目最近捐赠给 apache)

    【讨论】:

      【解决方案2】:

      这里有使用 Apache Jena 和 Maven 的说明:

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

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

      【讨论】:

        【解决方案3】:

        我终于通过排除“jena”-Dependency 作为从某个库中的传递依赖项引入的依赖项来解决此错误。

        【讨论】:

          猜你喜欢
          • 2022-01-03
          • 1970-01-01
          • 1970-01-01
          • 2020-04-14
          • 2012-02-02
          • 1970-01-01
          • 2016-03-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多