しばらく前に開発した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>