Проект Maven Run


231

Чи є "фаза" або "мета" Maven просто виконати основний метод класу Java? У мене є проект, який я хотів би перевірити вручну, просто зробивши щось на кшталт "mvn run".

Відповіді:


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?)
Alexander Mills

Так, є новіша версія, тому не копіюйте фрагмент вище 1-до-1, якщо ви не хочете використовувати версію 1.2.1. Дивіться mojohaus.org/exec-maven-plugin/usage.html для останньої версії На сьогодні це 1.6.0
user1053510

Дякую, ви також знаєте, як запустити основний клас, якщо в підмодулі з залежностями інших модулів?
користувач1767316

Це не є фактично запуском основного класу
Dexter

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"прапор.


Це насправді працює? Я спробував це як: <exec.mainClass> $ {foo.bar.SomeMainClass} </ exec.mainClass> і <exec.mainClass> foo.bar.SomeMainClass </exec.mainClass> і він не працює . Помилка така ж: [ПОМИЛКА] Не вдалося виконати ціль org.codehaus.mojo: exec-maven-plugin: 1.6.0: java (за замовчуванням-cli) у проекті newtrex: Параметри 'mainClass' для цілі org.codehaus.mojo : exec-maven-plugin: 1.6.0: Java відсутня або недійсна -> [Довідка 1]
Nenad Bulatovic

Це працює, ви можете перевірити цю публікацію
Saikat

@NenadBulatovic: Це працює, якщо ви заміните $ {foo.bar.SomeMainClass} на foo.bar.SomeMainClass -> без $ або {}
Кришна Сантош Сампат

14

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

Зробивши це, перейдіть до папки, яка містить проект вашого проекту, pom.xmlта запустіть це у командному рядку mvn exec:java. Для цього слід назвати основний метод.


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 для більшого використання.


-Dexec.args="...arg..."
Подайте


2

clean package exec:java -P Class_Containing_Main_Method Команда також є варіантом, якщо у вас є лише один основний метод (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:

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


Це мені не здається правильним. Чи не -P для 'профілю'? Якщо ви вказуєте його в командному рядку, чому вам потрібно помістити його у властивості плагіна?
Rup

@Rup Так, -Pдля профілю. Поділився цим, оскільки це також варіант запуску проекту Maven.
Abhijeet
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.