我使用Jena TDB加载RDF数据集并对其进行SPARQL查询。我使用以下maven依赖项:
<dependency>
<groupId>org.apache.jena</groupId>
<artifactId>apache-jena-libs</artifactId>
<type>pom</type>
<version>3.0.1</version>
</dependency>下面是我试图创建TDB数据集的java代码:
public void loadDirectory(String outputFile){
Dataset dataset = TDBFactory.createDataset(directoryPath);
Model tdb = dataset.getDefaultModel();
FileManager.get().readModel(tdb, outputFile);
tdb.close();
dataset.close();
LOG.info("RDF dataset loaded to memory");
} 它在函数的第一行失败: TDBFactory.createDataset( directoryPath ),并有以下错误消息:
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.sdw.model.JenaModel.loadDirectory(JenaModel.java:69)
at org.sdw.Main.main(Main.java:75)
Caused by: java.lang.NullPointerException
at org.apache.jena.tdb.sys.EnvTDB.processGlobalSystemProperties(EnvTDB.java:33)
at org.apache.jena.tdb.TDB.init(TDB.java:250)
at org.apache.jena.tdb.sys.InitTDB.start(InitTDB.java:29)
at org.apache.jena.system.JenaSystem.lambda$init$40(JenaSystem.java:114)
at java.util.ArrayList.forEach(ArrayList.java:1249)
at org.apache.jena.system.JenaSystem.forEach(JenaSystem.java:179)
at org.apache.jena.system.JenaSystem.forEach(JenaSystem.java:156)
at org.apache.jena.system.JenaSystem.init(JenaSystem.java:111)
at org.apache.jena.tdb.TDBFactory.<clinit>(TDBFactory.java:40)发布于 2016-04-21 12:22:57
POM使用遮阳插件。它需要使用ServicesResourceTransformer转换器管理服务文件(META_INF/ services /)。
将以下转换后的内容添加到POM文件中:
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />参见<transformers>,例如:https://github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-server/pom.xml
发布于 2018-05-14 06:55:45
我也遇到了同样的问题,发现被接受的答案总体上是正确的,但不完整(至少我花了很长一段时间才知道如何正确地应用答案的提示)。下面是它的工作原理。
1)您必须向您的pom.xml中添加maven阴影插件,如:https://github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-server/pom.xml中所示
2)将链接更改为插件配置中的主类。主类通过以下行提供:
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>org.apache.jena.fuseki.cmd.FusekiCmd</mainClass>
</transformer>您必须在mainClass标记中添加主类。现在使用maven build命令构建项目时,您将得到一个名为your-project-name-VERSION.jar的jar,它是您希望拥有的可运行的jar。如果您以前使用过一个“带依赖项的jar”,那么请确保运行新的jar(它不再包括名称中的"with依赖项“),否则您将遇到相同的问题。
发布于 2018-12-08 14:11:48
公认的答案实际上是遗漏了解决方案。所以这里是:
链接的文件是:https://github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-server/pom.xml
当然,你应该从中得到什么呢?
下面是应该添加到pom中的完整片段:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.MainClass</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>记住用主类替换com.example.MainClass
https://stackoverflow.com/questions/36755846
复制相似问题