我已经编写了一些可控制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.


之前已经对此进行了讨论(例如herehere),但是我已经修改了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-pluginmaven-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/

10-11 10:27