Führen Sie eine Java-Hauptmethode in Maven aus

1. Übersicht

In diesem kurzen Tutorial erfahren Sie, wie Sie mit Maven beliebige Hauptmethoden aus jeder Java-Klasse ausführen.

2. Das exec-maven-Plugin

Nehmen wir an, wir haben die folgende Klasse:

public class Exec { private static final Logger LOGGER = LoggerFactory.getLogger(Exec.class); public static void main(String[] args) { LOGGER.info("Running the main method"); if (args.length > 0) { LOGGER.info("List of arguments: {}", Arrays.toString(args)); } } }

Und wir wollen seine Hauptmethode von der Kommandozeile über Maven ausführen.

Dazu können wir das exec-maven-plugin verwenden . Um genauer zu sein, führt das exec: java- Ziel dieses Plugins die bereitgestellte Java-Klasse mit den Abhängigkeiten des umschließenden Projekts als Klassenpfad aus.

Um die Hauptmethode der Exec- Klasse auszuführen , müssen wir den vollständig qualifizierten Namen der Klasse an das Plugin übergeben:

$ mvn compile exec:java -Dexec.mainClass="com.baeldung.main.Exec" 02:26:45.112 INFO com.baeldung.main.Exec - Running the main method

Wie oben gezeigt, verwenden wir die Systemeigenschaft exec.mainClass , um den vollständig qualifizierten Klassennamen zu übergeben.

Außerdem müssen wir sicherstellen, dass der Klassenpfad bereit ist, bevor wir die Hauptmethode ausführen. Aus diesem Grund kompilieren wir den Quellcode, bevor wir die Hauptmethode ausführen.

Wir können dasselbe mit einfachem Java und Javac erreichen. Dies kann jedoch umständlich sein, wenn wir mit einem ziemlich großen Klassenpfad arbeiten. Andererseits,Bei Verwendung dieses Plugins kümmert sich Maven automatisch um das Auffüllen des Klassenpfads.

3. Argumente übergeben

Es ist auch möglich, Argumente von der Befehlszeile an die Hauptmethode zu übergeben. Dazu können wir die Systemeigenschaft exec.args verwenden:

$ mvn compile exec:java -Dexec.mainClass="com.baeldung.main.Exec" \ -Dexec.args="First Second" 02:31:08.235 INFO com.baeldung.main.Exec - Running the main method 02:31:08.236 INFO com.baeldung.main.Exec - List of arguments: [First, Second]

Wie oben gezeigt, übergeben wir eine durch Leerzeichen getrennte Liste von Argumenten. Darüber hinaus können wir eine durch Kommas getrennte Liste von Argumenten über die Systemeigenschaft exec.arguments verwenden:

$ mvn compile exec:java -Dexec.mainClass="com.baeldung.main.Exec" \ -Dexec.arguments="Hello World,Bye" 02:32:25.616 INFO com.baeldung.main.Exec - Running the main method 02:32:25.618 INFO com.baeldung.main.Exec - List of arguments: [Hello World, Bye]

Diese beiden Optionen können nützlich sein, wenn wir das Trennzeichen (Leerzeichen oder Komma) im Argument selbst verwenden möchten.

4. Benutzerdefinierte Konfiguration

Wir können die Plugin-Abhängigkeit auch explizit in unserer pom.xml deklarieren . Auf diese Weise können wir benutzerdefinierte und Standardkonfigurationen verwenden.

Zum Beispiel können wir eine Standardhauptklasse in der Konfiguration des Plugins angeben:

   org.codehaus.mojo exec-maven-plugin 3.0.0  com.baeldung.main.Exec    

Wenn wir nun nicht den vollständig qualifizierten Namen der gewünschten Klasse angeben, wird com.baeldung.main.Exec verwendet:

$ mvn compile exec:java 02:33:14.197 INFO com.baeldung.main.Exec - Running the main method

Es ist jedoch weiterhin möglich, diese Standardkonfiguration über eine explizite Ausführung zu überschreiben . mainClass- Systemeigenschaft.

Darüber hinaus können wir in unserer Konfiguration auch Standardprogrammargumente angeben:

 com.baeldung.main.Exec  First Second  

Auf diese Weise müssen wir diese Argumente nicht in der Befehlszeile übergeben:

$ mvn clean compile exec:java 02:34:24.448 INFO com.baeldung.main.Exec - Running the main method 02:34:24.450 INFO com.baeldung.main.Exec - List of arguments: [First, Second]

Zusätzlich zu diesen Konfigurationen stehen noch viele weitere zur Verfügung, die in der offiziellen Dokumentation behandelt werden.

5. Schlussfolgerung

In diesem kurzen Artikel haben wir gesehen, wie die Hauptmethoden über das Exec-Maven-Plugin über die Befehlszeile ausgeführt werden .

Wie üblich sind alle Beispiele auf GitHub verfügbar.