簡體   English   中英

使用Maven的Jena NoClassDefFoundError

[英]Jena NoClassDefFoundError with Maven

我有一個我之前開發的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 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)[...]

我的代碼沒有直接拋出錯誤,而是由我包含的庫拋出。 我可以通過降級父pom中的Jena版本來防止這種情況,或者我可以在這做什么?

PS:我現在有一個重現錯誤的最小代碼示例(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>

我知道可能有一個工廠而不是構造函數,但我想這仍然顯示出問題所在。

PS:我注意到我有依賴“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。

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>

您可以使用Maven Central搜索應用程序搜索缺少的類

它表明您似乎缺少的依賴關系是:

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

似乎不是2.6.4版本,但你最好建議你去尋找一個更現代的版本(這個項目最近被捐贈給了apache)

Apache Jena與Maven一起使用的說明如下:

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

在項目pom.xml指定ARQ 2.9.0作為依賴項將pom.xml您需要的其他Jena組件。

我最終解決了這個錯誤,排除了“jena” - 作為來自某個庫的傳遞依賴帶來的依賴關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM