问题说明
我最近一直在尝试将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是一个测试nquads文件,包含81个quad。
我是这样调用它的:
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在Windows Subsystem for Linux (version 2)中运行它。
如果你们中的任何人有任何洞察力可能导致这一点,我将非常感谢!
发布于 2021-02-15 23:58:24
根据vvs的评论,link 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。
https://stackoverflow.com/questions/66197269
复制相似问题