org.apache.jena.shared.NoReaderForLangException:Reader 未找到:NT

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

我正在编写一个 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

Jena 有一个初始化序列,用于设置运行时可用的组件。 (参见 here

从 Jena 依赖项和应用程序代码制作组合 jar("uber-jar"、"fat-jar"、"jar with dependencies")时,Jena 文件的内容必须组合并出现在将 jar 合并为同名的 java 资源。 (参见 here

这可以通过 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 project 中的配置。

感谢@AndyS 为我指明了这个方向!