2017-02-20 6 views
0

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

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

Я нашел this SO question с просьбой о том же вопросе, но ответ на этот вопрос мне не помог.

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

<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.java синус он ожидает два аргумента. Так что этот подход не сработал для меня.

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

+0

Это может также помочь, если местоположение загрузки .jar не имеет значения для плагина. Так что мы можем добавить это как зависимость плагина. http://www.mojohaus.org/exec-maven-plugin/examples/example-exec-using-plugin-dependencies.html – prime

ответ

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> 

Примечание: Если проект и файл банка testjar.jar оба содержат класс org.example.Main затем класс от проекта будет выполнена. Поскольку элементы classpath, определенные с помощью additionalClasspathElement, будут добавлены к пути классов объектов.

+0

Отлично (Y) Это похоже на решение проблемы. Спасибо. – prime

+0

Btw мы можем добиться этого для mvn exec: java, чтобы мы могли установить основной класс в pom. – prime

+0

@prime Взгляните на пример для 'exec: java'. – SubOptimal

Смежные вопросы