Можно ли использовать maven exec: java с произвольным классом java из команды iine? - PullRequest
0 голосов
/ 08 мая 2018

У нас есть несколько классов java / scala с main методами, которые было бы полезно запустить через mvn exec:java.

Возможно ли сделать это без , указав классы в pom.xml? Примеры, которые я видел, выглядят так:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.1</version>
  <executions><execution>
    <goals><goal>java</goal></goals>
  </execution></executions>
  <configuration>
    <mainClass>some.main.MyClass</mainClass>
  </configuration>
</plugin>

И затем выполняется как:

 mvn exec:java -Dexec.mainClass="some.main.MyClass"

Цель состоит в том, чтобы иметь возможность запустить

 mvn exec:java -Dexec.mainClass="some.other.main.OtherClass"

, хотя он не был указан в pom.xml.

При попытке запустить это ошибка

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (default-cli) on project sentiment: An exception occured while executing the Java class. myapp.MyMain

Другими словами, класс, указанный в командной строке, игнорируется в пользу класса, указанного в pom.xml.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Исходя из вашего использования, если вы используете -Dexec.mainClass каждый раз, я бы посоветовал вам избавиться от mainClass в конфигурации плагина. Преимущество определения mainClass состоит в том, что он работает так: mvn exec: java, и он выбирает основной класс из вашего определенного класса в pom.xml.

Как только вы удалите mainClass из pom.xml, вы сможете использовать любой mainClass при использовании плагина maven exec из командной строки.

0 голосов
/ 08 мая 2018

Документация на https://www.mojohaus.org/exec-maven-plugin/usage.html говорит:

Если вы хотите выполнять программы Java на одной и той же виртуальной машине, вы можете используйте версию командной строки

mvn exec:java -Dexec.mainClass="com.example.Main" [-Dexec.args="argument1"]

Это работает, не добавляя ничего к вашему пом.

Как написано в комментарии, это работает, только если у вас нет конфигурации в вашей поме. Если у вас есть конфигурация в pom, вы можете использовать в ней свойство, которое можно переопределить из командной строки

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.1</version>
  <executions><execution>
    <goals><goal>java</goal></goals>
  </execution></executions>
  <configuration>
    <mainClass>${my.mainClass}</mainClass>
  </configuration>
</plugin>

и предопределите свойство (вложено непосредственно в <project>)

<properties>
   <my.mainClass>some.main.MyClass</my.mainClass>
</properties>

тогда вы можете запустить с

mvn exec:java -Dmy.mainClass="aaa.Test"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...