【问题标题】:Apache Jena: Error: "java.lang.NoClassDefFoundError: org/apache/jena/riot/RDFDataMgr"Apache Jena:错误:“java.lang.NoClassDefFoundError:org/apache/jena/riot/RDFDataMgr”
【发布时间】:2021-05-17 16:54:40
【问题描述】:

问题说明

我最近一直在尝试将 Apache Jena 与 Java 一起使用(而不是在命令行上)。我写了一个简单的脚本来转换读写不同的RDF格式类型,所以

import org.apache.jena.riot.RDFDataMgr;
import org.apache.jena.query.Dataset;
import org.apache.jena.riot.Lang;

public class Go_NT
{
    public static void main(String[] args)
    {
        Dataset dataset = RDFDataMgr.loadDataset("triail.nq");
        RDFDataMgr.write(System.out, dataset, Lang.NTRIPLES);
    }
}

triail.nq 是一个包含 81 个四边形的测试 nquads 文件。

我是这样调用它的:

javac -cp "/mnt/e/Tráchtas/apache-jena-3.17.0/lib/*" Go_NT.java
java Go_NT

它编译没有错误,但是当我运行它时,它返回一个错误

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/jena/riot/RDFDataMgr
        at Go_NT.main(Go_NT.java:9)
Caused by: java.lang.ClassNotFoundException: org.apache.jena.riot.RDFDataMgr
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        ... 1 more

我尝试过的

我环顾四周,发现这个错误几乎总是因为没有包含必要的 .jar 文件,所以无法加载代码引用的类。这些其他问题的解决方案是包括所有 /apache-jena-3.17.0/lib/* 。奇怪的是,这对我不起作用——我确实在我的类路径中包含了 lib/ 的所有内容,但我仍然看到错误。

系统说明

我正在运行 Jena 3.17.0,使用此处提供的默认 Linux 二进制文件 (https://jena.apache.org/download/index.cgi)。我没有添加或删除任何其他 Jena 模块。

我在带有 Ubuntu 20.04 的 Linux 的 Windows 子系统(版本 2)中运行它。

如果你们中的任何人对可能导致此问题的原因有任何见解,我将不胜感激!

【问题讨论】:

  • 您是否尝试过将类路径设置添加到java 命令,就像您为javac 所做的那样?
  • 运行程序时需要提供类路径。 java -cp "/mnt/e/Tráchtas/apache-jena-3.17.0/lib/*" ... Go_NT

标签: java jena


【解决方案1】:

根据 vvs 的评论,链接https://howtodoinjava.com/java-examples/set-classpath-command-line/ 帮助很大。有两个问题:我需要在 java 命令中包含类路径,而不仅仅是 javac。我还需要包含 javac 输出所在的当前目录。

我通过设置 CLASSPATH 变量,然后将所有需要的目录添加到该变量来解决此问题。 (您也可以通过将类路径添加到 -cp 参数中来做到这一点)。请注意 : 分隔不同的目录。

简而言之,这就是我所做的:

export CLASSPATH=/mnt/e/Tráchtas/apache-jena-3.17.0/lib/*:.
javac Go_NT.java
java Go_NT

请注意,每次打开新终端时都需要重新分配 CLASSPATH。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多