Maven-Projekt ausführen

231

Gibt es eine Maven- "Phase" oder ein "Ziel", um einfach die Hauptmethode einer Java-Klasse auszuführen? Ich habe ein Projekt, das ich manuell testen möchte, indem ich einfach so etwas wie "mvn run" mache.

Verhogen
quelle

Antworten:

348

Siehe das Exec Maven Plugin . Sie können Java-Klassen ausführen mit:

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

Der Aufruf kann so einfach sein, als mvn exec:javaob sich die Plugin-Konfiguration in Ihrer pom.xml befindet. Die Plugin-Site auf Mojohaus hat ein detaillierteres Beispiel .

<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
quelle
14
So sollte eine Antwort aussehen! Referenz + einfaches Beispiel + komplexes Beispiel. Das einfache Beispiel hat den Trick für mich gemacht (keine Konfiguration mehr erforderlich)
Codewing
1
Gibt es eine neuere Version dieses Plugins (neuer als 1.2.1?)
Alexander Mills
Ja, es gibt eine neuere Version. Kopieren Sie das Fragment daher nicht 1: 1, es sei denn, Sie möchten Version 1.2.1 verwenden. Die neueste Version finden Sie ab sofort unter mojohaus.org/exec-maven-plugin/usage.html Es ist 1.6.0
user1053510
Danke, würden Sie auch wissen, wie man eine Hauptklasse ausführt, wenn sie sich im Submodul mit Abhängigkeiten in anderen Modulen befindet?
user1767316
Dies führt nicht wirklich die Hauptklasse
Dexter
23

1. Bearbeiten Sie POM.xml

Fügen Sie die folgende Eigenschaft hinzu pom.xml. Stellen Sie sicher, dass Sie den vollständig qualifizierten Klassennamen (dh mit dem Paketnamen) verwenden, der die folgende mainMethode enthält :

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

2. Führen Sie den Befehl aus

Lösen Sie nun vom Terminal aus den folgenden Befehl aus:

mvn clean compile exec:java

HINWEIS Sie können weitere Argumente über das -Dexec.args="xxx"Flag übergeben.

Saikat
quelle
Funktioniert das tatsächlich? Ich habe es als beides versucht: <exec.mainClass> $ {foo.bar.SomeMainClass} </ exec.mainClass> und <exec.mainClass> foo.bar.SomeMainClass </exec.mainClass> und es funktioniert nicht . Fehler ist der gleiche: [FEHLER] Ziel konnte nicht ausgeführt werden org.codehaus.mojo: exec-maven-plugin: 1.6.0: java (default-cli) im Projekt newtrex: Die Parameter 'mainClass' für das Ziel org.codehaus.mojo : exec-maven-plugin: 1.6.0: Java fehlt oder ist ungültig -> [Hilfe 1]
Nenad Bulatovic
Es funktioniert, vielleicht möchten Sie diesen Beitrag überprüfen
Saikat
@NenadBulatovic: Es funktioniert, wenn Sie $ {foo.bar.SomeMainClass} durch foo.bar.SomeMainClass ersetzen -> ohne $ oder {}
Krishna Santosh Sampath
14

Die oben genannten Antworten sind korrekt, aber ich vereinfache sie für Noobs wie mich. Gehen Sie zur POM-Datei Ihres Projekts. Fügen Sie eine neue Eigenschaft hinzu exec.mainClassund geben Sie ihren Wert als Klasse an, die Ihre Hauptmethode enthält. Für mich war es DriverClassin mainpkg. Ändern Sie es gemäß Ihrem Projekt. Geben Sie hier die Bildbeschreibung ein

Navigieren Sie anschließend zu dem Ordner, der Ihre Projekte enthält, pom.xmlund führen Sie diesen an der Eingabeaufforderung aus mvn exec:java. Dies sollte die Hauptmethode aufrufen.

shshnk
quelle
8

Es ist nicht erforderlich, ein neues Plugin in pom.xml hinzuzufügen. Führen Sie einfach diesen Befehl aus

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

Weitere Informationen finden Sie im Maven Exec-Plugin .

arulraj.net
quelle
-Dexec.args="...arg..."
Übergeben Sie
2

clean package exec:java -P Class_Containing_Main_Method Der Befehl ist auch eine Option, wenn Sie nur eine Hauptmethode (PSVM) im Projekt mit dem folgenden Maven-Setup haben.

Vergessen Sie nicht, die Klasse im <properties></properties>Abschnitt zu erwähnen 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 Run Configuration zusammen mit dem obigen Maven Setup:

Geben Sie hier die Bildbeschreibung ein

Abhijeet
quelle
Das sieht für mich nicht richtig aus. Ist -P nicht für 'Profil'? Wenn Sie es in der Befehlszeile angeben, warum müssen Sie es in die Plugin-Eigenschaften einfügen?
Rup
@ Rup Ja, -Pist für Profil. Dies wurde geteilt, da es auch eine Option zum Ausführen des Maven-Projekts ist.
Abhijeet