使用RDFDataMgr编写模型,但在使用maven-assembly:assembly打包后,它会抛出NullPointerException

问题描述 投票:1回答:1

这就是我用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(insied 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)

models av儿.Java:126:

    RDFDataMgr.write(outputStream, model, schema);

ARQ.globalContext中的org.apache.jena.query为空。使用assembly包装有什么问题吗?

我尝试使用model.write(outputStream, "RDF/XML")来编写模型。这在打包后不会抛出任何异常,但结果文件的内容与打包之前写入的结果文件非常不同,所有<owl ...>标记都缺失。

jena
1个回答
1
投票

Combining Apache Jena jars上查看此页面。基本上,Jena jar文件定义了一个文件中的初始化步骤,该文件位于jar中的路径META-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle。使用Assembly插件重新打包后,此初始化文件不存在,因此Jena初始化不完整。这可以通过手动创建适当的文件来解决,或者通过Maven Shade插件自动解决。

© www.soinside.com 2019 - 2024. All rights reserved.