我已經編寫了一些操縱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.
這之前(例如here和here)進行了討論,但我已經修改了我的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-plugin
和maven-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();
我的主類,但這並沒有幫助
你有一個github回購或什麼,你有你想要運行的代碼? – Ulises
爲什麼不使用maven central的給定版本而不是構建它? –
@Ulises不,很抱歉(公司關於不發佈任何代碼的政策......):我可以嘗試做一個(相對)最小的例子,但首先要檢查是否有可能不是明顯的錯誤製作 – ChrisW