【发布时间】: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所做的那样? -
为了更清楚地了解classpathhowtodoinjava.com/java-examples/set-classpath-command-line
-
运行程序时需要提供类路径。
java -cp "/mnt/e/Tráchtas/apache-jena-3.17.0/lib/*" ... Go_NT