我已经编写了一些可控制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文件以包含shade插件-但这还没有解决问题,而且我遇到了一些麻烦...
根据上面链接中讨论的评论,我检查了我的
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();
在我的主要课程开始时,但这并没有帮助
最佳答案
这不是类路径问题,而是滥用或配置错误问题。基本上,您会得到一个空指针异常at line 33 of EnvTDB
,特别是TDB.getContext()
返回null
。也许先尝试运行此命令:
org.apache.jena.query.ARQ.init();
关于java - 编译一个依赖耶拿的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38081684/