Führen Sie eine Java-Anwendung über die Befehlszeile aus

1. Übersicht

In der Regel enthält jede sinnvolle Anwendung eine oder mehrere JAR-Dateien als Abhängigkeiten. Es gibt jedoch Fälle, in denen eine JAR-Datei selbst eine eigenständige Anwendung oder eine Webanwendung darstellt.

In diesem Artikel konzentrieren wir uns auf das eigenständige Anwendungsszenario. Im Folgenden wird es als JAR-Anwendung bezeichnet.

In diesem Tutorial erfahren Sie zunächst, wie Sie eine JAR-Anwendung erstellen. Später erfahren Sie, wie Sie eine JAR-Anwendung mit oder ohne Befehlszeilenargumente ausführen .

2. Erstellen Sie eine JAR- Anwendung

Eine JAR-Datei kann eine oder mehrere Hauptklassen enthalten. Jede Hauptklasse ist der Einstiegspunkt einer Anwendung . Theoretisch kann eine JAR-Datei mehr als eine Anwendung enthalten, sie muss jedoch mindestens eine Hauptklasse enthalten, um ausgeführt werden zu können.

Für eine JAR-Datei kann ein Einstiegspunkt in ihrer Manifestdatei festgelegt sein . In diesem Fall ist die JAR-Datei eine ausführbare JAR. Die Hauptklasse muss in dieser JAR-Datei enthalten sein.

Lassen Sie uns zunächst ein kurzes Beispiel für das Kompilieren unserer Klassen und das Erstellen einer ausführbaren JAR mit einer Manifestdatei sehen:

$ javac com/baeldung/jarArguments/*.java $ jar cfm JarExample.jar ../resources/example_manifest.txt com/baeldung/jarArguments/*.class

Eine nicht-ausführbare JAR ist einfach eine JAR - Datei , die keine hat Main-Klasse in der Manifest - Datei definiert. Wie wir später sehen werden, können wir immer noch eine Hauptklasse ausführen, die in der JAR-Datei selbst enthalten ist.

So würden wir eine nicht ausführbare JAR ohne Manifestdatei erstellen:

$ jar cf JarExample2.jar com/baeldung/jarArguments/*.class

3. Java-Befehlszeilenargumente

Wie jede Anwendung akzeptiert auch eine JAR-Anwendung eine beliebige Anzahl von Argumenten, einschließlich Nullargumenten. Es hängt alles von den Anforderungen der Anwendung ab.

Auf diese Weise kann der Benutzer Konfigurationsinformationen angeben, wenn die Anwendung gestartet wird .

Infolgedessen kann die Anwendung fest codierte Werte vermeiden und dennoch viele verschiedene Anwendungsfälle verarbeiten.

Ein Argument kann beliebige alphanumerische Zeichen, Unicode-Zeichen und möglicherweise einige von der Shell zugelassene Sonderzeichen enthalten, z. B. '@'.

Argumente werden durch ein oder mehrere Leerzeichen getrennt . Wenn ein Argument Leerzeichen enthalten muss, müssen die Leerzeichen zwischen Anführungszeichen gesetzt werden. Entweder einfache oder doppelte Anführungszeichen funktionieren einwandfrei.

Normalerweise gibt der Benutzer für eine typische Java-Anwendung beim Aufrufen der Anwendung Befehlszeilenargumente nach dem Namen der Klasse ein.

Dies ist jedoch bei JAR-Anwendungen nicht immer der Fall.

Wie bereits erwähnt, ist der Einstiegspunkt einer Java-Hauptklasse die Hauptmethode. Die Argumente sind alle String s und sind mit dem Hauptverfahren als bestanden String - Array.

Innerhalb der Anwendung können wir jedoch jedes Element des String- Arrays in andere Datentypen konvertieren , z. B. char , int , double , deren Wrapper-Klassen oder andere geeignete Typen.

4. Führen Sie eine ausführbare JAR mit Argumenten aus

Sehen wir uns die grundlegende Syntax zum Ausführen einer ausführbaren JAR-Datei mit Argumenten an:

java -jar jar-dateiname [args…]

Die zuvor erstellte ausführbare JAR ist eine einfache Anwendung, die nur die übergebenen Argumente druckt. Wir können sie mit einer beliebigen Anzahl von Argumenten ausführen. Unten ist ein Beispiel mit zwei Argumenten:

$ java -jar JarExample.jar "arg 1" [email protected] 

Wir werden die folgende Ausgabe in der Konsole sehen:

Hello Baeldung Reader in JarExample! There are 2 argument(s)! Argument(1):arg 1 Argument(2):[email protected] 

Also, wenn ein ausführbares JAR - Aufruf, wir brauchen nicht die Haupt-Klassennamen in der Befehlszeile angeben . Wir fügen unsere Argumente einfach nach dem JAR-Dateinamen hinzu. Wenn wir nach dem Namen der ausführbaren JAR-Datei einen Klassennamen angeben, wird dieser einfach zum ersten Argument für die eigentliche Hauptklasse.

In den meisten Fällen ist eine JAR-Anwendung eine ausführbare JAR. In einer ausführbaren JAR kann maximal eine Hauptklasse in der Manifestdatei definiert sein.

Folglich können andere Anwendungen in derselben ausführbaren JAR-Datei nicht in der Manifestdatei festgelegt werden, aber wir können sie trotzdem über die Befehlszeile ausführen, wie wir es für eine nicht ausführbare JAR tun würden. Wir werden im nächsten Abschnitt genau sehen, wie.

5. Führen Sie eine nicht ausführbare JAR mit Argumenten aus

Um eine Anwendung in einer nicht ausführbaren JAR-Datei auszuführen , müssen Sie die Option -cp anstelle von -jar verwenden . Wir verwenden die Option -cp (kurz für classpath), um die JAR-Datei anzugeben, die die Klassendatei enthält, die wir ausführen möchten:

java -cp jar-dateiname hauptklassenname [args…]

Wie Sie sehen, müssen wir in diesem Fall den Namen der Hauptklasse in die Befehlszeile aufnehmen, gefolgt von Argumenten .

Die zuvor erstellte nicht ausführbare JAR enthält dieselbe einfache Anwendung. Wir können es mit beliebigen Argumenten (einschließlich Null) ausführen. Hier ist ein Beispiel mit zwei Argumenten:

$ java -cp JarExample2.jar com.baeldung.jarArguments.JarExample "arg 1" [email protected]

Und genau wie wir oben gesehen haben, sehen wir die folgende Ausgabe:

Hello Baeldung Reader in JarExample! There are 2 argument(s)! Argument(1):arg 1 Argument(2):[email protected]

6. Fazit

In diesem Lernprogramm haben wir zwei Möglichkeiten zum Ausführen einer JAR-Anwendung in der Befehlszeile mit oder ohne Argumente kennengelernt.

Wir haben auch gezeigt, dass ein Argument Leerzeichen und Sonderzeichen enthalten kann (sofern die Shell dies zulässt).

Wie immer ist der Code für die Beispiele auf GitHub verfügbar.