这就是我使用jena.model.Model
来写RDFDataMgr
的方式:
try {
Lang schema = Lang.RDFXML;
// System.out.println(System.getProperty("user.dir"));
File file = new File(owlDir);
FileOutputStream outputStream = new FileOutputStream(file, false);
outputStream.write("<?xml version=\"1.0\"?>\n".getBytes());
RDFDataMgr.write(outputStream, model, schema);
outputStream.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
在包装之前,此代码可以正常工作。 但是,在使用maven-assembly:assembly(固有的IDEA)进行打包之后,再将此代码导入另一个项目中,则模型编写过程将引发NullPointerException。
java.lang.NullPointerException
at org.apache.jena.riot.RDFWriterBuilder.build(RDFWriterBuilder.java:137)
at org.apache.jena.riot.RDFWriterBuilder.output(RDFWriterBuilder.java:149)
at org.apache.jena.riot.RDFDataMgr.write$(RDFDataMgr.java:1260)
at org.apache.jena.riot.RDFDataMgr.write(RDFDataMgr.java:1053)
at org.apache.jena.riot.RDFDataMgr.write(RDFDataMgr.java:1044)
at org.apache.jena.riot.RDFDataMgr.write(RDFDataMgr.java:985)
at seu.edu.kse.tools.ModelSaver.save2owl(ModelSaver.java:126)
at Main.main(Main.java:20)
ModelSaver.java:126:
RDFDataMgr.write(outputStream, model, schema);
软件包ARQ.globalContext
中的 org.apache.jena.query
为空。
使用assembly
的包装有问题吗?
我尝试使用model.write(outputStream, "RDF/XML")
编写模型。打包后不会引发任何异常,但是结果文件的内容与打包前缺少所有<owl ...>
标签的写入结果文件有很大不同。
答案 0 :(得分:1)
请参见Combining Apache Jena jars上的此页面。基本上,Jena jar文件在jar路径META-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle
中的文件中定义初始化步骤。用Assembly插件重新打包后,此初始化文件不存在,因此Jena初始化不完整。可以通过手动创建适当的文件或使用Maven Shade插件自动解决。