Я написал код, который управляет RDF, и поэтому зависит от jena framework. Я пытаюсь скомпилировать/упаковать его с помощью maven. Компиляция завершается, но когда я пытаюсь запустить созданный файл банку, я получаю:Компиляция класса, который зависит от 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
- Я предполагаю, что это не вызовет конфликта?
Дополнительная информация
Некоторые дополнительные данные в ответ на комментарий Andy S в. Соответствующая часть моего файла ПОМ:
<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