org.apache.jena.shared.NoReaderForLangException: читатель не найден: NT - PullRequest
0 голосов
/ 25 октября 2019

Я пишу программу на Java, которая содержит следующую строку:

this.model = readOntology(pathToTripleFile, "NT");

Я использую зависимость:

<dependency>
   <groupId>org.apache.jena</groupId>
   <artifactId>apache-jena-libs</artifactId>
   <version>3.13.1</version>
   <type>pom</type>
</dependency>

Она отлично работает на MacOS, но когда я ее упаковываю (сзависимости) и запустить его в Linux я получаю следующую ошибку:

org.apache.jena.shared.NoReaderForLangException: Reader not found: NT

1 Ответ

0 голосов
/ 28 октября 2019

Jena имеет последовательность инициализации, которая используется для настройки компонентов, доступных во время выполнения. (см. здесь )

При создании комбинированного jar ("uber-jar", "fat-jar", "jar with зависимости") из зависимостей Jena и кода приложения, содержимоефайлы Jena должны быть объединены и присутствовать в объединенном jar как одноименный ресурс java. (см. здесь )

Этого можно достичь с помощью плагина maven shade (обратите внимание, что я больше не использую maven-assembly-plugin).

При такой конфигурации плагина приложение запускается на сервере:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <configuration>
        <shadedArtifactAttached>false</shadedArtifactAttached>
        <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <mainClass>Main</mainClass>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
            <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer" />
            <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
                <addHeader>false</addHeader>
            </transformer>
        </transformers>
        <filters>
            <filter>
                <artifact>*:*</artifact>
                <excludes>
                    <!-- Some jars are signed but shading breaks that.
                         Don't include signing files.
                    -->
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                </excludes>
            </filter>
        </filters>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <!--<phase /><!- - Switch off -->
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Я использовал конфигурацию из проекта fuseki .

Спасибо@AndyS за указание мне в этом направлении!

...