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 为我指明了这个方向!
我正在编写一个 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 为我指明了这个方向!