Использование RDFDataMgr для записи модели, но после упаковки с помощью maven-assembly:assembly выдает исключение NullPointerException

#jena

#jena

Вопрос:

Вот как я пишу свой 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(внутренняя ИДЕЯ), а затем импортировать этот код в другой проект, процесс записи модели выдает исключение 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 null .
Что-то не так с использованием упаковки assembly ?

Я попытался использовать model.write(outputStream, "RDF/XML") для написания модели. Это не создает исключений после упаковки, но содержимое результирующего файла сильно отличается от результирующего файла, записанного перед упаковкой, со всеми <owl ...> отсутствующими тегами.

Ответ №1:

Смотрите Эту страницу об объединении Apache Jena jars. По сути, файлы Jena jar определяют шаги инициализации в файле, который находится по пути META-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle в jar. После переупаковки с помощью плагина Assembly этот файл инициализации отсутствует, и, следовательно, инициализация Jena является неполной. Это можно решить, создав соответствующий файл вручную или автоматически с помощью плагина Maven Shade.