我编写了一些操作RDF的代码,因此依赖于jena framework。我试图使用maven编译/打包它。编译完成,但是当我尝试运行生成的jar文件时,我得到:
Exception in thread "main" java.lang.ExceptionInInitializerError
at my.package.name.ClassName.<clinit>(SchemaAPI.java:96)
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.
之前已经讨论过这个问题(例如here和here)但是我修改了我的pom文件以包含阴影插件 - 这并没有解决问题,而我&#39 ;打了一个砖墙...
根据上面链接讨论中的评论,我检查了META-INF/services/org.apache.jena.system.JenaSubsystemLifecycle
文件中的my-project-0.1-jar-with-dependencies.jar
文件,确实包含对TDB(org.apache.jena.tdb.sys.InitTDB
)的引用 - 所以我知道这(几乎可以肯定)是问题的原因,但我没有找到解决方案......
我还包括maven-dependency-plugin
和maven-compiler-plugin
- 我认为这些不会造成任何冲突?
更多信息
回应Andy S评论的一些额外信息。我的pom文件的相关部分是:
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>uk.co.domain.mypackage.MyClass</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>
META-INF
中的相关文件只包含一个类:
$more META-INF/services/org.apache.jena.system.JenaSubsystemLifecycle
org.apache.jena.tdb.sys.InitTDB
$
我也尝试过添加
JenaSystem.init();
在我的主要课程开始时,但这没有帮助
答案 0 :(得分:0)
这不是类路径问题,而是滥用或配置错误。基本上,您获得空指针异常at line 33 of EnvTDB
,特别是TDB.getContext()
返回null
。也许先试试这个:
org.apache.jena.query.ARQ.init();