mvn exec:java для запуска файла java во внешнем файле JAR

В pom.xml есть использование maven-dependency-plugin загрузить определенный внешний JAR-файл в отдельную папку (в /tmp/externalTestJars/testjar.jar).

И я хочу использовать exec-maven-plugin запустить Java-класс в файле testjar.jar (Main.java).

Я нашел этот ТАК вопрос, задающий такой же вопрос, но ответ на этот вопрос мне не помог.

Если я непосредственно запускаю файл Main.java (в исходном проекте, где был создан.jar, используя mvn exec:java) Я могу использовать приведенную ниже конфигурацию пом.

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
    <mainClass>org.example.Main</mainClass>
    <!-- need to pass two arguments to the Main.java file main method -->
    <arguments>
        <argument>arg one</argument>
        <argument>arg two</argument>
    </arguments>
</configuration>
</plugin>

В приведенном выше вопросе SO есть ответ, подобный приведенному ниже, для запуска файла Java внутри файла.jar.

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
    <mainClass>org.example.Main</mainClass>
    <arguments>
        <argument>-jar</argument>
        <argument>/tmp/externalTestJars/testjar.jar</argument>
    </arguments>
</configuration>
</plugin>

Но в моем случае эти аргументы будут рассматриваться как те, что передаются для метода main в Main.java, так как он ожидает два аргумента. Так что этот подход не работает для меня.

Это можно сделать с помощью плагина exec maven или есть какой-либо другой способ сделать то же самое.

1 ответ

Решение

Если вы хотите запустить класс, похожий на java -cp /tmp/externalTestJars/testjar.jar org.example.Main Плагин должен быть настроен, как показано ниже.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.3.2</version>
    <configuration>
        <executable>java</executable>
        <arguments>
            <argument>-cp</argument>
            <argument>/tmp/externalTestJars/testjar.jar</argument>
            <argument>org.example.Main</argument>
        </arguments>
    </configuration>
</plugin>

Если вы хотите запустить класс, похожий на java -jar /tmp/externalTestJars/testjar.jar (при условии, org.example.Main определяется как Main-Class в MANIFEST.MF) плагин должен быть настроен как показано ниже.

<configuration>
    <executable>java</executable>
    <arguments>
        <argument>-jar</argument>
        <argument>/tmp/externalTestJars/testjar.jar</argument>
    </arguments>
</configuration>

В обоих случаях запустите его с mvn exec:exec

редактировать: пример использования mvn exec:java,

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.3.2</version>
    <executions>
        <execution>
            <phase>install</phase>
            <goals>
                <goal>java</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <mainClass>org.example.Main</mainClass>
        <additionalClasspathElements>
            <additionalClasspathElement>
                /tmp/externalTestJars/testjar.jar
            </additionalClasspathElement>
        </additionalClasspathElements>
    </configuration>
</plugin>

примечание: если проект и файл jar testjar.jar оба содержат класс org.example.Main тогда класс из проекта будет выполнен. Как элементы classpath определены additionalClasspathElement будет добавлен к пути к классам проектов.

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