Maven exec:jar запускает исполняемый плагин зависимости jar приводит к NPE
Я делаю приложение maven, которое использует службу конечной точки sparql. Я хотел бы иметь цель maven загрузить конечную точку sparql и запустить службу, но, похоже, у maven есть некоторые проблемы с настройкой пути к классам.
Я использую Blazegraph и его артефакт на https://mvnrepository.com/artifact/com.blazegraph/bigdata-jar.
Вот моя конфигурация плагина в pom.xml:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.bigdata.rdf.sail.webapp.StandaloneNanoSparqlServer</mainClass>
<includePluginDependencies>true</includePluginDependencies>
<includeProjectDependencies>false</includeProjectDependencies>
<executableDependency>
<groupId>com.blazegraph</groupId>
<artifactId>blazegraph-jar</artifactId>
</executableDependency>
<addOutputToClasspath>false</addOutputToClasspath>
</configuration>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.blazegraph/blazegraph-jar -->
<dependency>
<groupId>com.blazegraph</groupId>
<artifactId>blazegraph-jar</artifactId>
<version>2.1.4</version>
<scope>runtime</scope>
<type>jar</type>
</dependency>
</dependencies>
</plugin>
Выходные данные отладки намекают на то, что плагин не может найти артефакт:
Caused by: java.lang.NullPointerException
at org.codehaus.mojo.exec.AbstractExecMojo.findExecutableArtifact(AbstractExecMojo.java:278)
at org.codehaus.mojo.exec.ExecJavaMojo.determineRelevantPluginDependencies(ExecJavaMojo.java:650)
at org.codehaus.mojo.exec.ExecJavaMojo.addRelevantPluginDependenciesToClasspath(ExecJavaMojo.java:568)
at org.codehaus.mojo.exec.ExecJavaMojo.getClassLoader(ExecJavaMojo.java:520)
at org.codehaus.mojo.exec.ExecJavaMojo.execute(ExecJavaMojo.java:301)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
... 27 more
Что мне не хватает?
Редактировать 1 Этот вопрос не является дубликатом Что такое NullPointerException, и как я могу это исправить? потому что исключение выдается Maven, поскольку он не может найти нужный артефакт в списке зависимостей (но он должен).
Редактировать 2 Благодаря @Sean Patrick Floyd я частично решил проблему. Я думаю, что в конфигурации classpath все еще есть проблема. Теперь Maven находит основной класс и jar, но после выполнения я получаю другой NPE в скомпилированном коде. Глядя в открытый исходный код blazegraph, кажется, что он не может открыть ресурс внутри исполняемого файла jar.
Вот строка, которая вызывает NPE:
System.setProperty("jetty.home",
jettyXml.getClass().getResource("/war").toExternalForm());
1 ответ
<executableDependency>
механизм используется для двоичных файлов, а не для JAR, см. страницу использования. Удалите эту часть, этих настроек должно быть достаточно:
<mainClass>com.bigdata.rdf.sail.webapp.StandaloneNanoSparqlServer</mainClass>
<includePluginDependencies>true</includePluginDependencies>
Просто хотел опубликовать это здесь, поскольку он устранил мою проблему, и ничего больше не помогло, понижение версии до 1.5.0 сработало для меня на exec:java для тех же конфигураций плагинов, которые были опубликованы в вопросе, вдохновленные проблемой https://github.com/mojohaus/exec-maven-plugin/issues/76