Проект Maven Run

231

Есть ли у Maven «фаза» или «цель», чтобы просто выполнить метод main класса Java? У меня есть проект, который я хотел бы проверить вручную, просто выполнив что-то вроде «mvn run».

Verhogen
источник

Ответы:

348

Смотрите exec maven плагин . Вы можете запустить классы Java, используя:

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

Вызов может быть таким же простым, как mvn exec:javaесли бы конфигурация плагина была в вашем pom.xml. На сайте плагинов Mojohaus есть более подробный пример .

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>com.example.Main</mainClass>
                    <arguments>
                        <argument>argument1</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
Роберт Мунтяну
источник
14
Вот так должен выглядеть ответ! ссылка + простой пример + сложный пример. простой пример
помог
1
есть ли более новая версия этого плагина (новее, чем 1.2.1?)
Александр Миллс
Да, есть более новая версия, поэтому не копируйте фрагмент выше 1-к-1, если вы не хотите использовать версию 1.2.1. См. Mojohaus.org/exec-maven-plugin/usage.html для последней версии. это 1.6.0
user1053510
Спасибо, вы также знаете, как запустить основной класс, если он находится в подмодуле с зависимостями в других модулях?
user1767316
Это на самом деле не запустить основной класс
Декстер
23

1. Отредактируйте POM.xml

Добавьте следующее свойство в pom.xml. Убедитесь, что вы используете полное имя класса (т.е. с именем пакета), которое содержит mainметод:

<properties>
        <exec.mainClass>fully-qualified-class-name</exec.mainClass>
</properties>

2. Запустите команду

Теперь из терминала запустите следующую команду:

mvn clean compile exec:java

ПРИМЕЧАНИЕ. Дальнейшие аргументы можно передавать с помощью -Dexec.args="xxx"флага.

Saikat
источник
Это на самом деле работает? Я пробовал как: <exec.mainClass> $ {foo.bar.SomeMainClass} </ exec.mainClass> и <exec.mainClass> foo.bar.SomeMainClass </exec.mainClass>, и он не работает , Ошибка та же: [ОШИБКА] Не удалось выполнить цель org.codehaus.mojo: exec-maven-plugin: 1.6.0: java (default-cli) в проекте newtrex: параметры 'mainClass' для цели org.codehaus.mojo : exec-maven-plugin: 1.6.0: Java отсутствует или недействительна -> [Помощь 1]
Ненад Булатович
Это работает, вы можете проверить этот пост
Saikat
@NenadBulatovic: Это работает, если вы заменяете $ {foo.bar.SomeMainClass} на foo.bar.SomeMainClass -> без $ или {}
Кришна Сантош Сампатх
14

Вышеупомянутые ответы верны, но я упрощаю его для таких новичков, как я. Перейдите в pom-файл вашего проекта. Добавьте новое свойство exec.mainClassи укажите его значение в качестве класса, который содержит ваш метод main. Для меня это было DriverClassв mainpkg. Измените это согласно вашему проекту. введите описание изображения здесь

Сделав это, перейдите в папку, содержащую ваш проект, pom.xmlи запустите это в командной строке mvn exec:java. Это должно вызвать основной метод.

shshnk
источник
8

Нет необходимости добавлять новый плагин в pom.xml. Просто запустите эту команду

mvn org.codehaus.mojo:exec-maven-plugin:1.5.0:java -Dexec.mainClass="com.example.Main" | grep -Ev '(^\[|Download\w+:)' 

Смотрите плагин Maven Exec для более широкого использования.

arulraj.net
источник
Передайте дальнейшие аргументы через-Dexec.args="...arg..."
sstn
2

clean package exec:java -P Class_Containing_Main_Method Команда также является опцией, если у вас есть только один метод Main (PSVM) в проекте со следующей установкой Maven.

Не забудьте упомянуть класс в <properties></properties>разделе pom.xml:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.main.class>com.test.service.MainTester</java.main.class>
</properties>

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <configuration>
           <mainClass>${java.main.class}</mainClass>
        </configuration>
</plugin>

Настройка запуска STS вместе с вышеуказанной установкой Maven:

введите описание изображения здесь

Abhijeet
источник
Это не выглядит правильным для меня. Разве -P не для «профиля»? Если вы указываете это в командной строке, почему вы должны поместить его в свойствах плагина?
Руп
@Rup Да, -Pдля профиля. Поделились этим, так как это тоже вариант запуска проекта Maven.
Abhijeet