Analýza parametrov príkazového riadku s leteckou spoločnosťou

1. Úvod

V tomto návode predstavíme Airline - anotačnú knižnicu Java pre vytváranie rozhraní príkazového riadku (CLI).

2. Scenár

Pri vytváraní aplikácie príkazového riadku je prirodzené vytvárať jednoduché rozhranie, ktoré používateľovi umožní formovať výstup podľa potreby. S Git CLI hral takmer každý a dá sa povedať, aké je to silné a zároveň jednoduché. Bohužiaľ, pri vytváraní takéhoto rozhrania sa hodí niekoľko nástrojov.

Letecká spoločnosťsi kladie za cieľ znížiť štandardný kód, ktorý je typicky spojený s CLI v Jave, pretože najbežnejšie správanie je možné dosiahnuť pomocou anotácií a nulového kódu používateľa.

Chystáme sa implementovať malý program Java, ktorý bude využívať funkcie leteckých spoločností na napodobňovanie spoločného CLI. Odkryje používateľské príkazy na nastavenie našej konfigurácie programu, napríklad definovanie adresy URL databázy, prihlasovacích údajov a výrečnosti loggeru. Ponoríme sa tiež pod povrch našej knižnice a použijeme viac ako jej základy na to, aby sme zistili, či dokáže zvládnuť určitú zložitosť.

3. Inštalácia

Na začiatok pridajme závislosť na leteckej spoločnosti do našej pom.xml:

 com.github.rvesse letecká spoločnosť 2.7.2 

4. Jednoduché CLI

Vytvorme náš vstupný bod pre aplikáciu - Príkazový riadok trieda:

@Cli (name = "baeldung-cli", description = "Výučba leteckej spoločnosti Baeldung", defaultCommand = Help.class) verejná trieda CommandLine {public static void main (String [] args) {Cli cli = new Cli (CommandLine.class) ; Spustiteľný cmd = cli.parse (args); cmd.run (); }}

Prostredníctvom jednoduchého @Cli anotácie, definovali sme predvolený príkaz, ktorý sa spustí v našej aplikácii - Pomoc príkaz.

The Pomoc triedy je súčasťou knižnice Airline a sprístupňuje predvolený príkaz pomoci pomocou -h alebo -Pomoc možnosti.

Rovnako je hotové základné nastavenie.

5. Naše prvé velenie

Implementujme náš prvý príkaz, jednoduchý Prihlasovací príkaz triedy, ktorá bude kontrolovať výrečnosť našich protokolov. Triedu anotujeme @ Príkaz aby sa zabezpečilo, že sa pri volaní užívateľa použije správny príkaz setup-log:

@Command (name = "setup-log", description = "Nastaviť náš denník") verejná trieda LoggingCommand implementuje Runnable {@Inject private HelpOption help; @Option (name = {"-v", "--verbose"}, description = "Zapnúť / vypnúť výrečnosť protokolu") private boolean verbose = false; @Override public void run () {if (! Help.showHelpIfRequested ()) System.out.println ("Výrečnosť:" + verbose); }}}

Pozrime sa bližšie na náš príkladný príkaz.

Najskôr sme nastavili popis tak, aby náš pomocník vďaka injekcii zobrazil na požiadanie naše možnosti príkazov.

Potom sme vyhlásili a boolovský premenná, podrobné, a anotoval (-a) to @Možnosť dať mu meno, popis a tiež alias -v / –verbose reprezentovať našu možnosť príkazového riadku na kontrolu výrečnosti.

Nakoniec vo vnútri bežať sme dali nášmu príkazu zastaviť, kedykoľvek užívateľ požiada o pomoc.

Zatiaľ je všetko dobré. Teraz musíme pridať náš nový príkaz do hlavného rozhrania úpravou znaku @Cli anotácia:

@Cli (name = "baeldung-cli", description = "Výukový program pre letecké spoločnosti Baeldung", defaultCommand = Help.class, commands = {LoggingCommand.class, Help.class}) verejná trieda CommandLine {public static void main (String [] args ) {Cli cli = new Cli (CommandLine.class); Spustiteľný cmd = cli.parse (args); cmd.run (); }} 

Teraz, keď prejdeme setup-log -v nášmu programu to spustí našu logiku.

6. Obmedzenia a ďalšie

Videli sme, ako letecká spoločnosť bezchybne generuje CLI, ale ... je toho viac!

Môžeme určiť obmedzenia (alebo obmedzenia) pre naše parametre, aby sme zvládli povolené hodnoty, požiadavky alebo závislosti a ďalšie.

Ideme vytvoriť DatabaseSetupCommand triedy, ktorá bude reagovať na setup-db príkaz; rovnako ako predtým, ale pridáme trochu korenia.

Najskôr požiadame o typ databázy, pričom budeme akceptovať iba 3 platné hodnoty @AllowedRawValues:

@AllowedRawValues ​​(allowValues ​​= {"mysql", "postgresql", "mongodb"}) @Option (type = OptionType.COMMAND, name = {"-d", "--database"}, description = "Typ RDBMS. ", title =" typ RDBMS: mysql | postgresql | mongodb ") chránený reťazec rdbmsMode;

Pri používaní databázového pripojenia by používatelia bezpochyby mali poskytnúť koncový bod a niektoré poverenia na prístup k nemu. Necháme CLI, aby to vybavilo cez jeden (Režim adresy URL) alebo viac parametrov (hostiteľský režim). Na tento účel použijeme @MutuallyExclusiveWith anotácia, označujúca každý parameter rovnakou značkou:

@Option (type = OptionType.COMMAND, name = {"--rdbms: url", "--url"}, description = "URL, ktorá sa má použiť na pripojenie k RDBMS.", Title = "RDBMS URL") @MutuallyExclusiveWith ( tag = "mode") @Pattern (pattern = "^ (//.*) :( d *) (. *) u = (. *) & p = (. *)") chránený reťazec rdbmsUrl = ""; @Option (type = OptionType.COMMAND, name = {"--rdbms: host", "--host"}, description = "Hostiteľ, ktorý sa má použiť na pripojenie k RDBMS.", Title = "hostiteľ RDBMS") @MutuallyExclusiveWith ( tag = "mode") protected String rdbmsHost = ""; 

Všimnite si, že sme použili @ Vzor decorator, ktorý nám pomáha definovať formát reťazca URL.

Ak sa pozrieme do projektovej dokumentácie, nájdeme ďalšie cenné nástroje na spracovanie požiadaviek, udalostí, povolených hodnôt, konkrétnych prípadov a ďalších, ktoré nám umožňujú definovať naše vlastné pravidlá.

Nakoniec, ak si používateľ vybral režim hostiteľa, mali by sme ho požiadať, aby poskytli svoje poverenia. Týmto spôsobom je jedna možnosť závislá od druhej. Toto správanie môžeme dosiahnuť pomocou @RequiredOnlyIf anotácia:

@RequiredOnlyIf (names = {"- rdbms: host", "--host"}) @Option (type = OptionType.COMMAND, name = {"--rdbms: user", "-u", "--user "}, description =" Používateľ na prihlásenie do RDBMS. ", title =" Používateľ RDBMS ") chránený reťazec rdbmsUser; @RequiredOnlyIf (names = {"- rdbms: host", "--host"}) @Option (type = OptionType.COMMAND, name = {"--rdbms: heslo", "--password"}, popis = "Heslo pre prihlásenie do RDBMS.", Title = "Heslo RDBMS") chránené Reťazec rdbmsPassword; 

Čo ak na pripojenie k databáze DB potrebujeme použiť niektoré ovládače? A tiež predpokladajme, že musíme dostať viac ako jednu hodnotu v jednom parametri. Stačí zmeniť typ možnosti na OptionType.ARGUMENTS alebo - ešte lepšie - prijať zoznam hodnôt:

@Option (type = OptionType.COMMAND, name = {"--driver", "--jars"}, description = "Zoznam ovládačov", title = "--driver --driver") chránený zoznam pohárov = nový ArrayList ();

Teraz nezabudnime pridať príkaz na nastavenie databázy do našej hlavnej triedy. V opačnom prípade nebude k dispozícii v rozhraní CLI.

7. Spustiť

Zvládli sme to! Dokončili sme náš projekt a teraz ho môžeme spustiť.

Podľa očakávania bez splnenia akýchkoľvek parametrov Pomoc je vyvolané:

$ baeldung-cli využitie: baeldung-cli [] Príkazy sú: help Zobraziť informácie o pomoci setup-db Nastaviť našu databázu setup-log Nastaviť náš protokol Ďalšie informácie o konkrétnom príkaze nájdete v časti „pomoc baeldung-cli“.

Keby sme namiesto toho vykonali setup-log –pomoc, dostaneme:

$ baeldung-cli setup-log --help NÁZOV baeldung-cli setup-log - Nastaviť náš log SYNOPSIS baeldung-cli setup-log [-h] [-v] MOŽNOSTI -h, --help Zobraziť pomocné informácie -v, - -verbose Zapnutie / vypnutie výrečnosti protokolu

Nakoniec, zadaním parametrov do týchto príkazov sa spustí správna obchodná logika.

8. Záver

V tomto článku sme vytvorili jednoduché, ale výkonné rozhranie príkazového riadku s veľmi malým kódovaním.

Knižnica Airline so svojimi výkonnými funkciami zjednodušuje CLI a poskytuje nám všeobecnú, čistú a opakovane použiteľnú infraštruktúru. Umožňuje nám, vývojárom, sústrediť sa skôr na našu obchodnú logiku, ako tráviť čas navrhovaním toho, čo by malo byť malicherné.

Ako vždy, kód nájdete na GitHub.