Проект Maven Run

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


person Verhogen    schedule 06.07.2009    source источник


Ответы (6)


См. плагин 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>
person Robert Munteanu    schedule 06.07.2009
comment
вот как должен выглядеть ответ! ссылка + простой пример + сложный пример. простой пример помог мне (больше не нужна конфигурация) - person codewing; 11.10.2016
comment
есть ли более новая версия этого плагина (новее 1.2.1?) - person Alexander Mills; 23.09.2017
comment
Да, есть более новая версия, поэтому не копируйте фрагмент выше 1 к 1, если вы не хотите использовать версию 1.2.1. См. mojohaus.org/exec-maven-plugin/usage.html для последней версии. На данный момент это 1.6.0 - person user1053510; 24.10.2017
comment
Спасибо, знаете ли вы, как запустить основной класс, если он находится в подмодуле с зависимостями в других модулях? - person user1767316; 30.12.2019
comment
На самом деле это не запускает основной класс - person Dexter; 20.05.2020

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".

person Saikat    schedule 06.05.2018
comment
Это действительно работает? Я пробовал использовать оба варианта: ‹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] - person Nenad Bulatovic; 27.06.2019
comment
Это работает, вы можете проверить это сообщение - person Saikat; 27.06.2019
comment
@NenadBulatovic: это сработает, если вы замените $ {foo.bar.SomeMainClass} на foo.bar.SomeMainClass - ›без $ или {} - person Krishna Santosh Sampath; 23.03.2020

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

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

person shshnk    schedule 25.11.2015

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

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

Дополнительные сведения см. В плагине maven exec.

person arulraj.net    schedule 03.06.2016
comment
Передайте дополнительные аргументы через -Dexec.args="...arg..." - person sstn; 28.02.2018

Попробуйте подключаемый модуль Exec Maven

person dfa    schedule 06.07.2009

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:

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

person Abhijeet    schedule 19.11.2015
comment
Мне это не кажется правильным. Разве -P не для "профиля"? Если вы указываете его в командной строке, зачем вам нужно указывать его в свойствах плагина? - person Rup; 23.11.2015
comment
@Rup Да, -P для профиля. Разделили это, так как это также вариант запуска проекта Maven. - person Abhijeet; 24.11.2015