Java-CLI-Parser

8

Ich weiß, dass diese Frage bereits gestellt wurde, aber ich suche nach Java-CLI-Parser mit einer bestimmten Funktionalität. Ich möchte, dass es in der Lage ist, den Befehlszeilenbaum zu definieren, also Unterbefehle (und mehr als eine Ebenentiefe). So kann ich 3-4 Level von Befehlen haben, bevor ich zu den Optionen komme. Und diese Unterbefehle schließen sich gegenseitig aus. Danke

    
Sophie 15.04.2012, 06:41
quelle

4 Antworten

12

Kann mit JCommander gemacht werden. Jedes JCommander -Objekt ist im Wesentlichen ein Befehl mit einer beliebigen Anzahl von Parametern und / oder einer beliebigen Anzahl verschachtelter Unterbefehle, wobei das oberste JCommander -Objekt der root -Befehl ist. Befehlsparameter sind immer spezifisch für den Befehl, für den sie deklariert wurden und stören nicht die Parameter anderer Befehle. Die Schnittstelle zum Hinzufügen eines Unterbefehls ist nicht sehr intuitiv, aber möglich (siehe addCommand method ())

Hier ist eine Proof-of-Concept-Testklasse:

%Vor%

Bearbeiten: Wie man Befehle wieder verwendet.

Lösung 1, verwenden Sie Vererbung:

%Vor%

Ich denke, dass die Verwendung und das Verhalten für diesen Fall offensichtlich sind. Der einzige Nachteil ist, dass Sie nur von einer Klasse, die kann die Wiederverwendbarkeit in der Zukunft einschränken.

Lösung 2, Verwenden des Kompositionsmusters (siehe Dokument hier ):

%Vor%

Hier werden die verschachtelten commonArgs -Klassen-Parameter so behandelt, als wären sie direkte Parameter der Befehlsklasse. Sie können so viele Delegierte hinzufügen, wie Sie möchten, oder sogar Delegaten in andere Delegaten verschachteln und so weiter. Um den Wert der delegierten Option nach dem Parsen zu erhalten, tun Sie einfach myCommand1.commonArgs.isCommonOpt , etc.

    
rodion 15.04.2012 12:22
quelle
1

picocli unterstützt geschachtelte Unterbefehle in beliebiger Tiefe.

%Vor%

Sie können auch die Verwendung der Hilfe mit ANSI-Stilen und Farben mögen.

Beachten Sie, dass die Verwendungshilfe die registrierten Unterbefehle zusätzlich zu Optionen und Positionsparametern auflistet.

Die Verwendungshilfe kann einfach mit Anmerkungen angepasst werden.

  • Annotations-basiert
  • git-style Unterbefehle
  • geschachtelte Sub-Subkommandos
  • stark typisierte Optionsparameter
  • stark typisierte Positionsparameter
  • anpassbare Typkonvertierung
  • Mehrwertige Optionen
  • intuitives Modell für wie viele Argumente ein Feld verbraucht
  • fließende API
  • POSIX-ähnliche geclusterte Kurzoptionen
  • GNU Stil lange Optionen
  • erlaubt jedes Optionspräfix
  • ANSI-Farben in der Verwendungshilfe
  • anpassbare Verwendungshilfe
  • single source file: Als Quelle einbinden, um Ihre Anwendung in einem einzigen Jar zu halten
Remko Popma 30.06.2017 05:06
quelle
0

Wenn Ihr Befehlsausdruck komplex ist, können Sie daran denken, die Syntax zu definieren, ihr BNF zu schreiben und Bibliotheken wie JavaCC oder AntLR um einen eigenen Parser zu erstellen.

    
dash1e 15.04.2012 10:35
quelle
0

Ich denke, es wird besser sein, diese mehrstufigen Befehle in mehrere CLI-Tools aufzuteilen.

Anstelle von:
program cmd sub-cmd sub-sub-cmd -option1 argument -option2 argument

Fügen Sie dem Programmnamen eine oder zwei Ebenen hinzu:
program-cmd-sub-cmd sub-sub-cmd -option1 argument -option2 argument

Beispiel für ein echtes Wort:
svn-add -q -N foo.c

Sie können alle erforderlichen Klassen in einem einzigen JAR behalten (und sie beliebig oft wiederverwenden), fügen Sie einfach mehrere "Haupt" -Eintrittspunkte hinzu. Für grundlegende CLI-Analyse empfehle ich auch JCommander .

    
Vadim Ponomarev 06.05.2012 06:17
quelle