Projekt Maven Run

231

Czy istnieje „faza” lub „cel” Mavena, aby po prostu wykonać główną metodę klasy Java? Mam projekt, który chciałbym przetestować ręcznie, po prostu wykonując coś w stylu „Uruchom mvn”.

Verhogen
źródło

Odpowiedzi:

348

Zobacz wtyczkę exec maven . Możesz uruchamiać klasy Java za pomocą:

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

Wywołanie może być tak proste, mvn exec:javajakby konfiguracja wtyczki znajdowała się w pliku pom.xml. Witryna wtyczek na Mojohaus ma bardziej szczegółowy przykład .

<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>
Robert Munteanu
źródło
14
tak powinna wyglądać odpowiedź! referencja + prosty przykład + złożony przykład. prosty przykład
załatwił sprawę
1
czy jest nowsza wersja tej wtyczki (nowsza niż 1.2.1?)
Alexander Mills,
Tak, istnieje nowsza wersja, więc nie kopiuj fragmentu powyżej 1 do 1, chyba że chcesz użyć wersji 1.2.1 Zobacz najnowszą wersję mojohaus.org/exec-maven-plugin/usage.html Od teraz jest 1.6.0
1053510
Dzięki, czy wiedziałbyś również, jak uruchomić klasę główną, jeśli jest w podmodule z zależnościami w innych modułach?
user1767316,
To faktycznie nie prowadzi głównej klasy
Dextera
23

1. Edytuj POM.xml

Dodaj następującą właściwość w pom.xml. Upewnij się, że używasz w pełni kwalifikowanej nazwy klasy (tj. Z nazwą pakietu), która zawiera mainmetodę:

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

2. Uruchom polecenie

Teraz z terminalu uruchom następujące polecenie:

mvn clean compile exec:java

UWAGA Możesz przekazać kolejne argumenty za pomocą -Dexec.args="xxx"flagi.

Saikat
źródło
Czy to naprawdę działa? Próbowałem tego jako: <exec.mainClass> $ {foo.bar.SomeMainClass} </ exec.mainClass> i <exec.mainClass> foo.bar.SomeMainClass </exec.mainClass> i to nie działa . Błąd jest taki sam: [BŁĄD] Nie można wykonać celu org.codehaus.mojo: exec-maven-plugin: 1.6.0: java (default-cli) w projekcie newtrex: Parametry „mainClass” dla celu org.codehaus.mojo : exec-maven-plugin: 1.6.0: java zaginęło lub jest nieprawidłowe -> [Pomoc 1]
Nenad Bulatovic
Działa, możesz sprawdzić ten post
Saikat
@NenadBulatovic: Działa, jeśli podstawisz $ {foo.bar.SomeMainClass} na foo.bar.SomeMainClass -> bez $ lub {}
Krishna Santosh Sampath
14

Powyższe odpowiedzi są poprawne, ale upraszczam je dla noobów takich jak ja. Przejdź do pliku pom twojego projektu. Dodaj nową właściwość exec.mainClassi podaj jej wartość jako klasę, która zawiera główną metodę. Dla mnie to było DriverClassw mainpkg. Zmień to zgodnie z projektem. wprowadź opis zdjęcia tutaj

Po wykonaniu tej czynności przejdź do folderu zawierającego projekt pom.xmli uruchom go w wierszu polecenia mvn exec:java. To powinno wywołać główną metodę.

shshnk
źródło
8

Nie ma potrzeby dodawania nowej wtyczki do pom.xml. Po prostu uruchom to polecenie

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

Zobacz wtyczkę maven exec, aby uzyskać więcej informacji.

arulraj.net
źródło
Przekaż dalsze argumenty przez-Dexec.args="...arg..."
sstn
2

clean package exec:java -P Class_Containing_Main_Method polecenie jest również opcją, jeśli masz tylko jedną metodę główną (PSVM) w projekcie, z następującą instalacją Maven.

Nie zapomnij wspomnieć o klasie w <properties></properties>sekcji 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>

Konfiguracja uruchamiania STS wraz z powyższą konfiguracją Maven:

wprowadź opis zdjęcia tutaj

Abhijeet
źródło
To nie wygląda mi dobrze. Czy -P nie jest dla „profilu”? Jeśli podajesz go w wierszu poleceń, dlaczego musisz umieścić go we właściwościach wtyczki?
Rup,
@Rup Tak, -Pdotyczy profilu. Udostępniłem to, ponieważ jest to również opcja uruchomienia projektu Maven.
Abhijeet