Jena TDB java.lang.ExceptionInInitializerError

我正在使用Jena TDB加载RDF数据集并对其进行SPARQL查询。 我正在使用以下maven依赖项:

 org.apache.jena apache-jena-libs pom 3.0.1  

这是我试图创建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.(TDBFactory.java:40) 

POM使用shade插件。 它需要使用ServicesResourceTransformer转换器管理服务文件(META_INF / services /)。 org.apache.maven.plugins.shade.resource.ServicesResourceTransformer

例如: https : //github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-server/pom.xml

我遇到了同样的问题,发现接受的答案通常是正确但不完整的(至少我花了很长时间才弄清楚如何正确应用答案的提示)。 下面是它的工作原理。

1)您必须将maven-shade插件添加到pom.xml中,如下所示: https : //github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-server/pom.xml

2)更改插件配置中主类的链接。 主要课程通过以下方式提供:

  org.apache.jena.fuseki.cmd.FusekiCmd  

您必须在mainClass标记中添加主类。 现在使用maven build命令构建项目时,您将获得一个名为your-project-name-VERSION.jar的jar,它是您想要的runnable jar。 如果您以前使用过“带有依赖关系的jar”,那么请确保运行新的(不再包含名称中的“with dependencies”),否则您将遇到同样的问题。

Interesting Posts