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.

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>

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.


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.




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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.