【问题标题】:A simple Jena example not working一个简单的耶拿示例不起作用
【发布时间】:2017-02-11 07:43:10
【问题描述】:

我正在尝试运行 Jena 官方文档附带的第一个示例。

这是我在运行命令“java -jar target/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar”时遇到的错误:

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

这是我的 pom 文件:

<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>

这是我目前唯一的文件:

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");
    }

}

我只是想开始,所以如果有办法修复 pom 或者更简单的甚至不使用 maven,请告诉我。

在 Tahir 在这样的答案中提到这一点后,我在我的 pom 文件中的依赖项中添加了一个新的依赖项:

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

现在我收到了这个错误:

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

谢谢

【问题讨论】:

  • 耶拿用户列表上的问答:lists.apache.org/thread.html/…
  • @AndyS,我为 eclipse 选项添加了一个链接,你提到的答案是这样的:我不知道如何将它们与程序集插件结合起来。希望有人知道这里。

标签: java maven jena


【解决方案1】:

当您使用程序集插件重新打包 jar 时,ServiceLoader 文件被破坏了。 ServiceLoader 是 Jena 用来提供跨 jar 初始化的标准 Java 功能。

你需要合并所有调用的文件

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

来自 jars(其中有几个文件,内容不同)。

如果你真的必须构建一个组合 jar,而不是说使用“mvn exec:exec”,那么使用带有 <transformer implementation= "org.apache.maven.plugins.shade.resource.ServicesResourceTransformer/> 的 shade 插件。

【讨论】:

  • 我会试试这个并告诉你
【解决方案2】:

您需要在类路径中添加以下 jar 文件:
slf4j-simple-1.6.1.jar

只需添加此依赖项,看看它是否能解决您的问题?

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

【讨论】:

  • 我将它添加为 maven 依赖项,现在我收到一个新错误。
  • 更新您的问题:说您添加了所需的依赖项并使用新错误@KarimMtl 更新您的问题
  • 在为您添加上一条评论之前我已经这样做了。
  • stackoverflow.com/questions/36755846/… 这是你的答案...检查一下并告诉我它是否有帮助@KarimMtl
【解决方案3】:

在此处找到的说明:http://www.iandickinson.me.uk/articles/jena-eclipse-helloworld/ 对我有用。

我仍然认为为此制作一个有效的 pom 并不复杂。如果没有人提供允许它无错误运行的 pom, 我会接受我自己的答案。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2015-11-23
    • 2016-03-02
    相关资源
    最近更新 更多