编译一个依赖于jena的类

时间:2016-06-28 16:33:55

标签: java maven jena

我编写了一些操作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文件以包含阴影插件 - 这并没有解决问题,而我&#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-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();

在我的主要课程开始时,但这没有帮助

1 个答案:

答案 0 :(得分:0)

这不是类路径问题,而是滥用或配置错误。基本上,您获得空指针异常at line 33 of EnvTDB,特别是TDB.getContext()返回null。也许先试试这个:

org.apache.jena.query.ARQ.init();