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

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>

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.


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


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.


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.