Was ist eine gute Möglichkeit, Befehlszeilenargumente in Java zu analysieren?
java
command-line
command-line-arguments
picocli
Lindelof
quelle
quelle
How to parse java command line arguments?
. Aber niemand möchte wirklich Code schreiben, um dies zu tun, sondern ein Werkzeug verwenden. Aber die Suche nach Werkzeugen undAntworten:
Guck dir diese an:
Oder rollen Sie Ihre eigenen:
Zum Beispiel ist dies , wie Sie verwenden
commons-cli
zwei String - Argumente zu analysieren:Verwendung über die Befehlszeile:
quelle
Schauen Sie sich den neueren JCommander an .
Ich habe es geschaffen. Ich freue mich über Fragen oder Feature-Anfragen.
quelle
Ich habe versucht, eine Liste von Java CLI-Parsern zu führen .
quelle
Sollten Sie Ihren eigenen Java-Befehlszeilenparser erstellen oder eine Bibliothek verwenden?
Viele kleine Utility-ähnliche Anwendungen führen wahrscheinlich eine eigene Befehlszeilenanalyse durch, um die zusätzliche externe Abhängigkeit zu vermeiden. Picocli kann eine interessante Alternative sein.
Picocli ist eine moderne Bibliothek und ein Framework, mit dem Sie mühelos leistungsstarke, benutzerfreundliche und GraalVM-fähige Befehlszeilen-Apps erstellen können. Es befindet sich in einer Quelldatei, sodass Apps es als Quelle einschließen können, um das Hinzufügen einer Abhängigkeit zu vermeiden.
Es unterstützt Farben, automatische Vervollständigung, Unterbefehle und mehr. Geschrieben in Java, verwendbar von Groovy, Kotlin, Scala usw.
Eigenschaften:
<command> -xvfInputFile
sowie<command> -x -v -f InputFile
)"1..*"
."3..5"
Die Verwendungshilfemeldung kann einfach mit Anmerkungen angepasst werden (ohne Programmierung). Zum Beispiel:
( Quelle )
Ich konnte nicht widerstehen, einen weiteren Screenshot hinzuzufügen, um zu zeigen, welche Verwendungshilfemeldungen möglich sind. Die Hilfe zur Verwendung ist das Gesicht Ihrer Anwendung. Seien Sie also kreativ und haben Sie Spaß!
Haftungsausschluss: Ich habe picocli erstellt. Feedback oder Fragen sind sehr willkommen.
quelle
Ich habe JOpt verwendet und fand es ziemlich praktisch: http://jopt-simple.sourceforge.net/
Auf der Startseite finden Sie außerdem eine Liste mit ca. 8 alternativen Bibliotheken. Schauen Sie sich diese an und wählen Sie die aus, die Ihren Anforderungen am besten entspricht.
quelle
Jemand hat mich in letzter Zeit auf args4j hingewiesen, das auf Anmerkungen basiert. Ich mag es wirklich!
quelle
Dies ist Googles Befehlszeilen-Analysebibliothek, die im Rahmen des Bazel-Projekts als Open-Source-Bibliothek bereitgestellt wird. Persönlich denke ich, dass es das beste ist und viel einfacher als Apache CLI.
https://github.com/pcj/google-options
Installation
Bazel
Gradle
Maven
Verwendungszweck
Erstellen Sie eine Klasse,
OptionsBase
die Ihre@Option
(n) erweitert und definiert .Analysieren Sie die Argumente und verwenden Sie sie.
https://github.com/pcj/google-options
quelle
myexecutable -c file.json -d 42 --outdir ./out
. Und ich sehe nicht, wie Sie kurze / lange / Beschreibungsoptionen definieren ... CheersSchauen Sie sich das Commons CLI- Projekt an, viele gute Sachen drin.
quelle
Ja.
Ich denke, Sie suchen nach so etwas: http://commons.apache.org/cli
quelle
Ich weiß, dass die meisten Leute hier 10 Millionen Gründe finden werden, warum sie meinen Weg nicht mögen, aber egal. Ich mag es, die Dinge einfach zu halten, also trenne ich den Schlüssel einfach mit einem '=' vom Wert und speichere sie in einer HashMap wie folgt:
Sie können jederzeit eine Liste mit den erwarteten Argumenten führen, um dem Benutzer zu helfen, falls er ein Argument vergessen oder ein falsches verwendet hat. Wenn Sie jedoch zu viele Funktionen wünschen, ist diese Lösung ohnehin nichts für Sie.
quelle
Vielleicht diese
JArgs-Parsing-Suite für Befehlszeilenoptionen für Java - Dieses winzige Projekt bietet eine praktische, kompakte, vorgefertigte und umfassend dokumentierte Suite von Parsern für Befehlszeilenoptionen für Java-Programmierer. Zunächst wird eine Analyse angeboten, die mit 'getopt' im GNU-Stil kompatibel ist.
ritopt, der ultimative Optionsparser für Java - Obwohl mehrere Befehlszeilenoptionsstandards festgelegt wurden, folgt ritopt den im opt-Paket vorgeschriebenen Konventionen.
quelle
Vielleicht finden Sie diesen Meta-Artikel des Unglücks als Ausgangspunkt interessant:
http://furiouspurpose.blogspot.com/2008/07/command-line-parsing-libraries-for-java.html
quelle
Ich habe einen anderen geschrieben: http://argparse4j.sourceforge.net/
Argparse4j ist eine Befehlszeilenargument-Parser-Bibliothek für Java, die auf Pythons Argparse basiert.
quelle
Wenn Sie mit gnu getopt vertraut sind, gibt es einen Java-Port unter: http://www.urbanophile.com/arenn/hacking/download.htm .
Es scheint einige Klassen zu geben, die dies tun:
quelle
Airline @ Github sieht gut aus. Es basiert auf Anmerkungen und versucht, Git-Befehlszeilenstrukturen zu emulieren.
quelle
Wenn Sie Spring Boot bereits verwenden, ist die Argumentanalyse sofort einsatzbereit.
Wenn Sie nach dem Start etwas ausführen möchten, implementieren Sie die
ApplicationRunner
Schnittstelle:Ihre
run
Methode wird aufgerufen, nachdem der Kontext erfolgreich gestartet wurde.Wenn Sie Zugriff auf die Argumente benötigen, bevor Sie Ihren Anwendungskontext starten, können Sie die Anwendungsargumente einfach manuell analysieren:
Und schließlich, wenn Sie Zugriff auf Ihre Argumente in einer Bean benötigen, fügen Sie einfach Folgendes ein
ApplicationArguments
:quelle
Argparse4j ist das Beste, was ich gefunden habe. Es ahmt Pythons Argparse-Bibliothek nach, die sehr praktisch und mächtig ist.
quelle
Wenn Sie etwas Leichtes (JAR-Größe ~ 20 KB) und eine einfache Verwendung wünschen, können Sie den Argument-Parser ausprobieren . Es kann in den meisten Anwendungsfällen verwendet werden, unterstützt die Angabe von Arrays im Argument und ist von keiner anderen Bibliothek abhängig. Es funktioniert für Java 1.5 oder höher. Der folgende Auszug zeigt ein Beispiel für die Verwendung:
Weitere Beispiele finden Sie hier
quelle
Ich würde die Verwendung der
Apache Common CLI
Bibliothek nicht empfehlen , da sie nicht threadsicher ist.Es verwendet statusbehaftete Klassen mit statischen Variablen und Methoden für interne Arbeiten (z. B.
OptionBuilder
) und sollte nur in stark kontrollierten Situationen mit einem Thread verwendet werden.quelle
Wie einer der zuvor erwähnten Kommentare ( https://github.com/pcj/google-options ) wäre zunächst eine gute Wahl.
Eine Sache, die ich hinzufügen möchte, ist:
1) Wenn Sie auf einen Parser-Reflexionsfehler stoßen, versuchen Sie bitte, eine neuere Version der Guave zu verwenden. in meinem Fall:
2) Beim Ausführen der Befehlszeile:
3) Wenn Sie Hilfe bei der Verwendung benötigen, geben Sie einfach Folgendes ein:
quelle
Für Spring-Benutzer sollten wir auch https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/env/SimpleCommandLinePropertySource.html und seinen Zwillingsbruder https: //docs.spring erwähnen .io / spring / docs / current / javadoc-api / org / springframework / core / env / JOptCommandLinePropertySource.html (JOpt-Implementierung derselben Funktionalität). Der Vorteil in Spring ist, dass Sie die Befehlszeilenargumente direkt an Attribute binden können. Hier finden Sie ein Beispiel: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/env/ CommandLinePropertySource.html
quelle