5

RDF データセットをロードし、それに対して SPARQL クエリを作成するために Jena TDB を使用しています。私は次のmaven依存関係を使用しています:

<dependency>
    <groupId>org.apache.jena</groupId>
    <artifactId>apache-jena-libs</artifactId>
    <type>pom</type>
    <version>3.0.1</version>
</dependency>

TDB データセットを作成しようとしている Java コードは次のとおりです。

public void loadDirectory(String outputFile){      
    Dataset dataset = TDBFactory.createDataset(directoryPath);      
    Model tdb = dataset.getDefaultModel();      
    FileManager.get().readModel(tdb, outputFile);      
    tdb.close();      
    dataset.close();      
    LOG.info("RDF dataset loaded to memory");      
}      

関数の最初の行で失敗しています: TDBFactory.createDataset( directoryPath ) 次のエラー メッセージが表示されます。

Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.sdw.model.JenaModel.loadDirectory(JenaModel.java:69)
    at org.sdw.Main.main(Main.java:75)
Caused by: java.lang.NullPointerException
    at org.apache.jena.tdb.sys.EnvTDB.processGlobalSystemProperties(EnvTDB.java:33)
    at org.apache.jena.tdb.TDB.init(TDB.java:250)
    at org.apache.jena.tdb.sys.InitTDB.start(InitTDB.java:29)
    at org.apache.jena.system.JenaSystem.lambda$init$40(JenaSystem.java:114)
    at java.util.ArrayList.forEach(ArrayList.java:1249)
    at org.apache.jena.system.JenaSystem.forEach(JenaSystem.java:179)
    at org.apache.jena.system.JenaSystem.forEach(JenaSystem.java:156)
    at org.apache.jena.system.JenaSystem.init(JenaSystem.java:111)
    at org.apache.jena.tdb.TDBFactory.<clinit>(TDBFactory.java:40)
4

3 に答える 3

5

POM は shade プラグインを使用します。ServicesResourceTransformer トランスフォーマーでサービス ファイル (META_INF/services/) を管理する必要があります。

変換された以下を POM ファイルに追加します。

<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />

例については、こちらを参照してください<transformers>: https://github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-server/pom.xml

于 2016-04-21T12:22:57.420 に答える
1

私は同じ問題を抱えていて、受け入れられた答えは一般的に正しいが完全ではないことがわかりました(少なくとも、答えのヒントを正しく適用する方法を理解するまでにかなりの時間がかかりました)。これがどのように機能するかです。

1) 次のように、maven-shade プラグインを pom.xml に追加する必要があります

2) プラグイン構成のメイン クラスへのリンクを変更します。メイン クラスは、次の行を介して提供されます。

<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
          <mainClass>org.apache.jena.fuseki.cmd.FusekiCmd</mainClass>
</transformer>

タグにメインクラスを追加する必要がありますmainClass。maven build コマンドを使用してプロジェクトをビルドすると、必要な実行可能な jar と呼ばれる jar が取得your-project-name-VERSION.jarされます。以前に「依存関係のある jar」を使用していた場合は、新しいもの (名前に「依存関係あり」が含まれていない) を実行してください。そうしないと、同じ問題が発生します。

于 2018-05-14T06:55:45.573 に答える