Java-Befehlszeilenschnittstellen: picocli

Hallo allerseits!

Der nächste Start der Java Developer Group , bei dem wir alle unser Experiment fortsetzen, dass der Lernprozess nicht kontinuierlich sein muss ("Sollte die Kontroverse kontinuierlich sein?"). Das heißt, wir haben das Programm leicht überarbeitet und gemischt und in drei Schritte unterteilt, die leicht mit einer Pause zwischen ihnen übergeben werden können. Im Allgemeinen ist es sowohl für Studenten als auch für uns interessant, wenn nur niemand feucht wäre, sonst würde das Programm sogar etwas komplizierter erscheinen, obwohl es vorher nicht einfach war. Nun, ein traditionell interessanter Artikel zu unserem Kurs.

Lass uns gehen!



Auf der offiziellen Website wird picocli als „leistungsstarke kleine Befehlszeilenschnittstelle“ beschrieben, bei der es sich um ein Java-Framework mit nur einer Datei handelt, mit dem Befehlszeilenargumente analysiert und fehlerfreie, leicht anpassbare Hilfsnachrichten erstellt werden können. Mit Blumen. " Dieser Beitrag bietet einen kurzen Überblick über Picocli 0.9.7 und seine Verwendung zum Parsen von Befehlszeilenargumenten in Java-Code.

Wie die anderen in dieser Reihe beschriebenen Java- Befehlszeilenverarbeitungsbibliotheken ist picocli Open Source . Da alle picocli in einer einzigen Java-Datei implementiert sind, können Sie den Quellcode einfach direkt verwenden, wenn Sie dies wünschen. Auf der Picocli-Website wird betont, dass "die Besonderheit von Picocli darin besteht, dass Benutzer Anwendungen ausführen können, die Picocli verwenden, ohne Picocli selbst als externe Abhängigkeit zu benötigen: Der gesamte Quellcode befindet sich in einer Datei, um die Autoren der Anwendung zu ermutigen, ihn in den Programmquellcode aufzunehmen." . Wenn Sie picocli als Bibliothek im Maven Repository hat eine zu bevorzugen JAR-Datei mit dem Satz von kompilierten Class - Dateien (picocli stellt eine Java-Datei, aber zahlreiche Unterklassen und Annotation enthält s).

Der einfachste Weg, sich ein Bild von der Einzeldatei-Natur von Picocli zu machen, besteht darin, sich die Datei selbst anzusehen. Der Quellcode für CommandLine.java ist auf der Picocli- Downloadseite verfügbar. Die folgenden beiden Screenshots zeigen die Ausgabe von Javap beim Ausführen der CommandLine-Klasse und beim Ausführen einer ihrer internen Anmerkungen und einer ihrer internen Klassen.





Unabhängig davon, ob wir CommandLine.java in unsere eigene Klassen- / JAR-Datei kompilieren oder eine bereits erstellte JAR von Maven verwenden, ist der Quellcode der Anwendung, die Picocli verwendet, offensichtlich der gleiche. Die Bestimmungsphase beim Parsen von Argumenten mit Picocli wird durch Kommentieren der Felder der Instanz erreicht, in denen die mit den Befehlszeilenparametern verknüpften Werte gespeichert werden. Dies wird im folgenden Codeausschnitt gezeigt.

Picocli "Definition" -Stufe
/*     Java   picocli. */ @Command( name="Main", description="Demonstrating picocli", headerHeading="Demonstration Usage:%n%n") public class Main { @Option(names={"-v", "--verbose"}, description="Verbose output?") private boolean verbose; @Option(names={"-f", "--file"}, description="Path and name of file", required=true) private String fileName; @Option(names={"-h", "--help"}, description="Display help/usage.", help=true) boolean help; 

Das obige Codebeispiel zeigt, dass Sie mit Picocli mehrere Flaggennamen angeben können (in meinem Beispiel Einzelzeichennamen mit einem Bindestrich und Mehrzeichennamen mit zwei Bindestrichen). Dieses Beispiel zeigt auch, dass für die erforderlichen Parameter erforderlich = wahr festgelegt werden kann und für Hilfsoptionen wie das Drucken von Verwendungsdetails und das Eliminieren von Fehlern im Zusammenhang mit dem Fehlen erforderlicher Parameter help = true angegeben werden kann. Beachten Sie, dass Picocli 0.9.8 zusätzliche Unterstützung für die spezifischeren Hilfsnachrichtentypen versionHelp und usageHelp bietet .

Die Parsing-Phase in Picocli wird in CommandLine.populateCommand (T, String ...) ausgeführt , wobei T eine Instanz der Klasse mit Picocli-annotierten Feldern ist und die verbleibenden Zeilen die Argumente sind, die analysiert werden müssen. Dies wird im folgenden Codeausschnitt gezeigt.
Picocli-Analysephase

 final Main main = CommandLine.populateCommand(new Main(), arguments); 

Die Abrufphase in Picocli besteht darin, einfach auf die mit Picocli kommentierten Felder der Instanz zuzugreifen, die in der Phase "Parsing" an die CommandLine.populateCommand (T, String ...) -Methode übergeben wurden. Ein einfaches Beispiel für eine solche „Umfrage“ ist in der folgenden Auflistung dargestellt.

Picocli-Umfragephase

 out.println( "The provided file path and name is " + main.fileName + " and verbosity is set to " + main.verbose); 

Das Anzeigen von Zusatznachrichten oder Verwendungsinformationen für den Benutzer, wenn -h oder --help in der Befehlszeile angegeben ist, ist so einfach wie das "Abrufen" eines mit Picocli-Anmerkungen versehenen Felds, für das help = true angegeben wurde, um festzustellen, ob dieser boolesche Wert festgelegt wurde oder nicht und rufen Sie bei Installation eine der überladenen CommandLine.usage-Methoden auf. Ich musste eine der statischen Versionen dieser Methode verwenden, wie in der folgenden Liste gezeigt.

Support-Meldungen / Nutzungsinformationen in Picocli

 if (main.help) { CommandLine.usage(main, out, CommandLine.Help.Ansi.AUTO); } 

Die folgenden Screenshots zeigen eine einfache Anwendung, die mit picocli geschrieben wurde. Der erste Screenshot zeigt den Typ der Fehlermeldung und die Stapelverfolgung, wenn das erforderliche Flag fehlt. Der zweite Screenshot zeigt, wie die in den Anmerkungen angegebenen langen und kurzen Namen verwendet werden. Das dritte Bild zeigt die Funktion der Anzeige von Hilfsmeldungen in Aktion.





Eine der zusätzlichen Funktionen von Picocli, die in vielen anderen Java-Befehlszeilenargument-Analysebibliotheken nicht verfügbar ist, ist die Unterstützung der Farbsyntax a. In der ersten Auflistung dieses Beitrags wurden Zeilen in Anmerkungen mit @ | definiert | @ Syntax. In dem obigen Screenshot, der die Verwendung von Hilfsnachrichten demonstriert, wurden diese Zeichen ohne spezielle Verarbeitung unverändert übertragen. Wenn ich diesen Beispielcode jedoch in Cygwin ausführe, werde ich sehen, was diese Zeichen bewirken.



Im obigen Screenshot sehen wir, dass Picocli die Farbsyntax (gelb und weiß) automatisch auf die Zusatznachrichtenoptionen angewendet hat und auch fettgedruckte und unterstrichene Fettdrucksyntax auf Bereiche mit der Beschreibung von Zusatznachrichten angewendet hat, in denen die @ | -Syntax angewendet wurde | @.

Im Folgenden finden Sie zusätzliche Picocli-Funktionen, die bei der Auswahl eines Frameworks oder einer Bibliothek berücksichtigt werden müssen, um das Parsen von Befehlszeilenargumenten in Java zu erleichtern.

  • Picocli ist ein Open Source-Projekt, das mit Apache 2.0 lizenziert ist.
  • Für Picocli müssen keine Bibliotheken oder Frameworks von Drittanbietern heruntergeladen werden.
  • Der gesamte Picocli-Quellcode ist in einer einzigen Java-Datei enthalten. Dieser Code kann kopiert und in ein eigenes Konfigurationsverwaltungssystem eingefügt und mit dem Rest des Anwendungscodes kompiliert werden. Dies bedeutet, dass selbst die Picocli-JAR-Datei nicht erforderlich ist.
  • Die CommandLine.java-Quelldatei (Picocli 0.9.7) umfasst etwas mehr als 3.700 Zeilen (einschließlich Leerzeichen und Kommentare) und wiegt fast 200 KB. Die Datei picocli-0.9.7.jar wiegt ungefähr 83 KB.
  • Picocli ist aktuell und wird regelmäßig aktualisiert. Version 0.9.8 wurde gestern veröffentlicht (nachdem ich den größten Teil dieses Beitrags geschrieben habe).
  • Picocli verfügt über eine sehr detaillierte Dokumentation und ist in vielerlei Hinsicht aktueller als die Dokumentation einiger anderer Java-Befehlszeilenverarbeitungsbibliotheken.
  • Die Unterstützung der Farbsyntax von Picocli ist einfach zu verwenden, und die Hilfe zur plattformübergreifenden Verwendung der Farbsyntax ist im Abschnitt Unterstützte Plattformen dokumentiert.
  • Die Verwendung von Picocli-Annotationen für Felder auf Instanzebene ähnelt der Verwendung von Annotationen in einigen anderen Befehlszeilenverarbeitungsbibliotheken und bietet dieselben Vorteile.
  • Die Hauptfunktionen von Picocli sind sehr praktisch und leicht zu erlernen. Picocli unterstützt jedoch auch die Möglichkeit, verschiedene Aspekte der Befehlszeilenverarbeitung mit Picocli zu konfigurieren.

Die Einträge in diesem Beitrag sind auf GitHub vollständig verfügbar.

Picocli ist eine unterstützte und aktualisierte Bibliothek zum Parsen von Java-Befehlszeilenargumenten. Es enthält mehrere neue Funktionen und Ansätze aus einigen anderen verfügbaren Befehlszeilenverarbeitungsbibliotheken, die in Java geschrieben wurden. Es wurden jedoch einige verschiedene Funktionen hinzugefügt (z. B. die Farbsyntax und die gesamte Bibliothek, die in einer Java-Quelldatei enthalten ist). Picocli ist an sich recht einfach zu bedienen und attraktiv, wird sich jedoch höchstwahrscheinlich von anderen Bibliotheken für einen einzelnen Entwickler abheben, wenn dieser Entwickler die Farbsyntax oder die Möglichkeit unterstützen möchte, dem Projekt des Entwicklers eine Quellcodedatei ohne zusätzliche oder kompilierte JAR-Dateien hinzuzufügen. Klassendateien.

DAS ENDE

Wie immer warten wir auf Ihre Fragen und Kommentare.

Source: https://habr.com/ru/post/de419401/


All Articles