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
будет добавлен к пути к классам проектов.