2016-06-28 91 views
0

我已經編寫了一些操縱RDF的代碼,依賴於jena framework。我試圖用maven編譯/打包它。編制完成,但是當我嘗試運行生成jar文件,我得到:編譯一個依賴於jena的類

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文件,包括樹蔭插件 - 和這並沒有解決這個問題,我打了一磚牆...

根據上面的鏈接討論中的意見,我檢查了我的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 - 我認爲這些不會造成任何衝突?

更多信息

響應安迪小號的評論一些額外的信息。我的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

你有一個github回購或什麼,你有你想要運行的代碼? – Ulises

+0

爲什麼不使用maven central的給定版本而不是構建它? –

+0

@Ulises不,很抱歉(公司關於不發佈任何代碼的政策......):我可以嘗試做一個(相對)最小的例子,但首先要檢查是否有可能不是明顯的錯誤製作 – ChrisW

回答

0

這不是一個類路徑問題,它是eithe誤用或錯誤配置問題。基本上,你會得到一個空指針異常at line 33 of EnvTDB,特別是TDB.getContext()返回null。也許嘗試運行這第一個:

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

對不起 - 這並沒有解決它... – ChrisW

+0

嘗試調試它,找出它失敗的地方。 –

+0

這個錯誤和我原來的問題是一樣的 - 我不確定如何開始調試它,因爲它是關於maven包的外部jar – ChrisW