2017-02-10 5 views
0

Ich versuche, das erste Beispiel zu starten, das mit der offiziellen Jena-Dokumentation geliefert wird. HierEin einfaches Jena-Beispiel funktioniert nicht

ist der Fehler, den ich immer bin, wenn ich den Befehl "java -jar Ziel/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar" laufen:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Exception in thread "main" java.lang.ExceptionInInitializerError 
    at com.mycompany.app.RdfWriter.main(RdfWriter.java:13) 
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:248) 
    at org.apache.jena.tdb.sys.InitTDB.start(InitTDB.java:29) 
    at org.apache.jena.system.JenaSystem.lambda$init$2(JenaSystem.java:119) 
    at java.util.ArrayList.forEach(ArrayList.java:1249) 
    at org.apache.jena.system.JenaSystem.forEach(JenaSystem.java:194) 
    at org.apache.jena.system.JenaSystem.forEach(JenaSystem.java:171) 
    at org.apache.jena.system.JenaSystem.init(JenaSystem.java:117) 
    at org.apache.jena.rdf.model.ModelFactory.<clinit>(ModelFactory.java:49) 
    ... 1 more 

Hier mein pom ist Datei:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>my-app</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>my-app</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.jena</groupId> 
     <artifactId>apache-jena-libs</artifactId> 
     <version>3.1.1</version> 
     <type>pom</type> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>2.7</version> 
    </dependency> 
    </dependencies> 


    <build> 
     <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
      <archive> 
       <manifest> 
       <mainClass>com.mycompany.app.RdfWriter</mainClass> 
       </manifest> 
      </archive> 
      <descriptorRefs> 
       <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
      </configuration> 
     </plugin> 
     </plugins> 
    </build> 

</project> 

Und hier ist die einzige Datei, die ich bisher:

package com.mycompany.app; 

import org.apache.jena.rdf.model.*; 
import org.apache.jena.vocabulary.*; 

public class RdfWriter { 

    static String personURI = "http://somewhere/JohnSmith"; 
    static String fullName  = "John Smith"; 

    public static void main(String[] args) { 
     // create an empty model 
     Model model = ModelFactory.createDefaultModel(); 
     // create the resource 
     Resource johnSmith = model.createResource(personURI); 
     // add the property 
     johnSmith.addProperty(VCARD.FN, fullName); 
     System.out.println("this is rdf writer"); 
    } 

} 

ich möchte nur, um loszulegen, so, wenn es wa y, um die pom zu reparieren oder gar nicht maven zu verwenden, wenn es einfacher ist, lass es mich wissen.

habe ich eine neue Abhängigkeit zu den Abhängigkeiten in meiner pom-Datei nach Tahir erwähnt, dass, wie dies in der Antwort:

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-simple</artifactId> 
    <version>1.6.2</version> 
</dependency> 

Und jetzt diesen Fehler Ich erhalte:

Exception in thread "main" java.lang.ExceptionInInitializerError 
    at com.mycompany.app.RdfWriter.main(RdfWriter.java:14) 
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:248) 
    at org.apache.jena.tdb.sys.InitTDB.start(InitTDB.java:29) 
    at org.apache.jena.system.JenaSystem.lambda$init$2(JenaSystem.java:119) 
    at java.util.ArrayList.forEach(ArrayList.java:1249) 
    at org.apache.jena.system.JenaSystem.forEach(JenaSystem.java:194) 
    at org.apache.jena.system.JenaSystem.forEach(JenaSystem.java:171) 
    at org.apache.jena.system.JenaSystem.init(JenaSystem.java:117) 
    at org.apache.jena.rdf.model.ModelFactory.<clinit>(ModelFactory.java:49) 
    ... 1 more 

Dank

+0

auf der Benutzerliste Jena gestellt und beantwortet: https://lists.apache.org/thread.html/[email protected]%3Cusers.jena.apache.org%3E – AndyS

+0

@AndyS, fügte ich einen Link für die Eclipse-Option , die Antwort, die Sie erfüllen, sagt dies: Ich weiß nicht, wie man sie mit dem Assembly-Plugin kombiniert. Hoffentlich weiß es jemand hier. –

Antwort

0

Sie müssen folgende JAR-Datei in Ihrem Klassenpfad hinzufügen:
slf4j-simple-1.6.1.jar

Fügen Sie einfach diese Abhängigkeit hinzu und prüfen Sie, ob sie Ihre Probleme löst oder nicht?

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple --> 
<dependency> 
<groupId>org.slf4j</groupId> 
<artifactId>slf4j-simple</artifactId> 
<version>1.6.1</version> 

+0

Ich habe es als maven Abhängigkeit hinzugefügt und jetzt bekomme ich einen neuen Fehler. –

+0

Aktualisieren Sie Ihre Frage: Sagen Sie, dass Sie die erforderliche Abhängigkeit hinzugefügt und aktualisieren Sie Ihre Frage mit neuen Fehler @ KarimMtl –

+0

Ich tat das, bevor Sie den vorherigen Kommentar für Sie hinzufügen. –

0

Die hier Anweisungen: http://www.iandickinson.me.uk/articles/jena-eclipse-helloworld/ für mich gearbeitet.

Ich denke immer noch, es sollte nicht kompliziert sein, einen gültigen Pom dafür zu machen. Wenn niemand einen Pom zur Verfügung stellt, der dies ohne Fehler erlaubt, werde ich meine eigene Antwort akzeptieren.

Dank

0

Wenn Sie das Glas mit der Montage-Plugin neu verpackt, bekam die ServiceLoader Dateien verstümmelt. ServiceLoader ist ein Standard-Java-Feature, das Jena verwendet, um die Initialisierung über JARs hinweg zu ermöglichen.

Sie müssen alle

META-INF/services/org.apache.jena.system.JenaSubsystemLifecycle 

aus den Gläsern genannt Dateien kombinieren (es gibt mehrere dieser Dateien, unterschiedliche Inhalte).

Wenn Sie wirklich ein kombiniertes Glas bauen müssen, anstatt sagen "mvn exec: exec", dann verwenden Sie das Schatten-Plugin mit <transformer implementation= "org.apache.maven.plugins.shade.resource.ServicesResourceTransformer/>.

+0

Ich werde dies versuchen und lassen Sie es wissen –

Verwandte Themen