0

しばらく前に開発したJavaMavenプロジェクトがありますが、それはもう機能しません。親pomを、Jenaのバージョンが変更されたと思う別のMavenプロジェクトと一緒に使用し、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)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」の依存関係がある場合とない場合で、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>
4

3 に答える 3

2

Maven Central 検索アプリケーションを使用して、不足しているクラスを検索できます。

不足していると思われる依存関係が次のとおりであることを示しています。

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

バージョン 2.6.4 ではないようですが、おそらくより新しいバージョンを使用することをお勧めします (このプロジェクトは最近 apache に寄付されました)。

于 2012-04-16T18:10:57.620 に答える
1

Maven で Apache Jena を使用する手順は次のとおりです。

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

プロジェクトの依存関係として ARQ 2.9.0 を指定するpom.xmlと、必要な他の Jena コンポーネントが取り込まれます。

于 2012-04-16T21:49:45.720 に答える
0

一部のライブラリから推移的な依存関係として持ち込まれた「ジェナ」依存関係を除外することで、最終的にこのエラーを解決しました。

于 2012-04-17T13:36:31.473 に答える