Запустить основной класс проекта Maven

Я создал простое консольное Java-приложение, созданное с помощью Maven. Есть ли способ, что основной класс (который не требует никаких аргументов) может быть запущен из командной строки с помощью команды maven, например:

mvn run-app com.example.MainClass

2 ответа

Решение

Попробуйте maven-exec-plugin. Оттуда:

mvn exec:java -Dexec.mainClass="com.example.Main"

Это запустит ваш класс в JVM. Ты можешь использовать -Dexec.args="arg0 arg1" передать аргументы.

Если вы используете Windows, примените кавычки для exec.mainClass а также exec.args:

mvn exec:java -D"exec.mainClass"="com.example.Main"

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

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <executions>
    <execution>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>com.example.Main</mainClass>
    <arguments>
      <argument>foo</argument>
      <argument>bar</argument>
    </arguments>
  </configuration>
</plugin>

Хотя maven exec добивается цели здесь, я нашел его довольно плохим для настоящего теста. В ожидании maven shell и в надежде, что это поможет другим, я наконец-то вышел на этот репозиторий mvnexec

Клонируйте его и вставьте ссылку на скрипт где-нибудь на вашем пути. я использую ~/bin/mvnexecкак у меня ~/bin на моем пути. Я думаю, что mvnexec - хорошее имя для сценария, но вы можете изменить символическую ссылку...

Запустите его из корня вашего проекта, где вы можете увидеть src и целевой каталог.

Скрипт поиска классов с методом main, предлагающий выбор для выбора (Пример с mavenized JMeld project)

$ mvnexec 
 1) org.jmeld.ui.JMeldComponent
 2) org.jmeld.ui.text.FileDocument
 3) org.jmeld.JMeld
 4) org.jmeld.util.UIDefaultsPrint
 5) org.jmeld.util.PrintProperties
 6) org.jmeld.util.file.DirectoryDiff
 7) org.jmeld.util.file.VersionControlDiff
 8) org.jmeld.vc.svn.InfoCmd
 9) org.jmeld.vc.svn.DiffCmd
10) org.jmeld.vc.svn.BlameCmd
11) org.jmeld.vc.svn.LogCmd
12) org.jmeld.vc.svn.CatCmd
13) org.jmeld.vc.svn.StatusCmd
14) org.jmeld.vc.git.StatusCmd
15) org.jmeld.vc.hg.StatusCmd
16) org.jmeld.vc.bzr.StatusCmd
17) org.jmeld.Main
18) org.apache.commons.jrcs.tools.JDiff
#? 

Если выбран один (ввод числа), вас попросят указать аргументы (вы можете избежать mvnexec -P)

По умолчанию он компилирует проект при каждом запуске. но вы можете избежать этого, используя mvnexec -B

Позволяет искать только в тестовых классах -M или же --no-mainили только в основных классах -T или же --no-test, также есть фильтр по названию -f <whatever>

Надеюсь, это поможет вам сэкономить время, для меня это поможет.

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