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());

https://github.com/blazegraph/database/blob/master/bigdata-jar/src/main/java/com/bigdata/rdf/sail/webapp/StandaloneNanoSparqlServer.java#L142

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

Другие вопросы по тегам