Raščlanjivanje parametara naredbenog retka sa zrakoplovnom linijom

1. Uvod

U ovom vodiču, predstavit ćemo Airline - Java biblioteku koja se temelji na bilješkama za izgradnju sučelja naredbenog retka (CLI).

2. Scenarij

Kada gradite aplikaciju naredbenog retka, prirodno je stvoriti jednostavno sučelje koje će korisniku omogućiti oblikovanje rezultata po potrebi. Gotovo svi su se igrali s Git CLI-jem i mogu se povezati s tim koliko je moćan, ali jednostavan. Jao, malo alata dobro dođe prilikom izrade takvog sučelja.

Zrakoplovna kompanijaima za cilj smanjenje uzorka koda koji je tipično povezan s CLI-ima u Javi, jer se najčešće ponašanje može postići bilješkama i nultim korisničkim kodom.

Implementirat ćemo mali Java program koji će iskoristiti Airline-ove funkcionalnosti oponašajući zajednički CLI. Izložit će korisničke naredbe za postavljanje konfiguracije našeg programa, poput definiranja URL-a baze podataka, vjerodajnica i opširnosti zapisnika. Također ćemo zaroniti ispod površine naše knjižnice i upotrijebit ćemo više od njenih osnova kako bismo ispitali može li se nositi s nekom složenošću.

3. Postavljanje

Za početak, dodajmo ovisnost o zrakoplovnoj tvrtki našoj pom.xml:

 com.github.rvesse zrakoplovna tvrtka 2.7.2 

4. Jednostavan CLI

Stvorimo našu ulaznu točku za aplikaciju - CommandLine razred:

@Cli (name = "baeldung-cli", description = "Baeldung Tutorial Airline", defaultCommand = Help.class) javna klasa CommandLine {public static void main (String [] args) {Cli cli = new Cli (CommandLine.class) ; Izvodljivi cmd = cli.parse (args); cmd.run (); }}

Kroz jednostavan @Cli napomena, definirali smo zadanu naredbu koja će se izvoditi u našoj aplikaciji - Pomozite naredba.

The Pomozite class dolazi kao dio zrakoplovne knjižnice i izlaže zadanu naredbu za pomoć pomoću -h ili -Pomozite mogućnosti.

Baš tako, osnovno postavljanje je gotovo.

5. Naše prvo zapovjedništvo

Provedimo našu prvu, jednostavnu naredbu Nalog za bilježenje klasa koja će kontrolirati opširnost naših dnevnika. Napomenut ćemo razred @Naredba kako bi se osiguralo da se primjenjuje ispravna naredba kada korisnik zove dnevnik postavljanja:

@Command (name = "setup-log", description = "Setup our log") javna klasa LoggingCommand implementira Runnable {@Inject private HelpOption help; @Option (name = {"-v", "--verbose"}, description = "Uključivanje / isključivanje detaljnosti dnevnika)) private boolean verbose = false; @Override public void run () {if (! Help.showHelpIfReanted ()) System.out.println ("Verbosity:" + opširno); }}}

Pogledajmo bliže našu primjeru naredbe.

Prvo, postavili smo opis tako da će naš pomoćnik, zahvaljujući injekciji, prikazati naše naredbene mogućnosti kada se zatraži.

Tada smo proglasili boolean varijabla, glagolan, i to označio sa @Opcija dati mu ime, opis i također zamjensko ime -v / –verbose predstavljati našu opciju naredbenog retka za kontrolu opširnosti.

Napokon, unutar trčanje metodu, naredili smo našoj naredbi da se zaustavi kad god korisnik zatraži pomoć.

Zasada je dobro. Sada moramo dodati novu naredbu glavnom sučelju izmjenom znaka @Cli napomena:

@Cli (name = "baeldung-cli", description = "Baeldung Tutorial Airline", defaultCommand = Help.class, naredbe = {LoggingCommand.class, Help.class}) javna klasa CommandLine {public static void main (String [] args ) {Cli cli = novi Cli (CommandLine.class); Izvodljivi cmd = cli.parse (args); cmd.run (); }} 

Ako prođemo setup-log -v našem programu, on će voditi našu logiku.

6. Ograničenja i više

Vidjeli smo kako Airline besprijekorno generira CLI, ali ... ima još toga!

Možemo odrediti ograničenja (ili ograničenja) za naše parametre da obrađuju dopuštene vrijednosti, zahtjeve ili ovisnosti i još mnogo toga.

Stvorit ćemo a DatabaseSetupCommand razreda, koji će odgovoriti na postava-db naredba; isto kao i ranije, ali dodati ćemo malo začina.

Prvo ćemo zatražiti vrstu baze podataka, prihvaćajući samo 3 valjane vrijednosti @AllowedRawValues:

@AllowedRawValues ​​(allowedValues ​​= {"mysql", "postgresql", "mongodb"}) @Option (type = OptionType.COMMAND, name = {"-d", "--database"}, description = "Vrsta RDBMS-a. ", title =" RDBMS tip: mysql | postgresql | mongodb ") zaštićeni String rdbmsMode;

Kada koriste vezu s bazom podataka, bez ikakve sumnje, korisnici bi trebali navesti krajnju točku i neke vjerodajnice za pristup. Dopustit ćemo CLI-u da ovo riješi kroz jedan (URL način) ili više parametara (host način). Za ovo ćemo koristiti @MutuallyExclusiveWith napomena, označavajući svaki parametar istom oznakom:

@Option (type = OptionType.COMMAND, name = {"--rdbms: url", "--url"}, description = "URL koji se koristi za povezivanje sa RDBMS-om.", Title = "RDBMS URL") @MutuallyExclusiveWith ( tag = "mode") @Pattern (pattern = "^ (//.*) :( d *) (. *) u = (. *) & p = (. *)") protected String rdbmsUrl = ""; @Option (type = OptionType.COMMAND, name = {"--rdbms: host", "--host"}, description = "Host za upotrebu za povezivanje sa RDBMS-om.", Title = "RDBMS host") @MutuallyExclusiveWith ( tag = "mode") zaštićeni niz rdbmsHost = ""; 

Imajte na umu da smo koristili @Uzorak dekorator, koji nam pomaže definirati format niza URL-a.

Ako pogledamo projektnu dokumentaciju, naći ćemo i drugu vrijedni alati za rukovanje zahtjevima, pojavama, dopuštenim vrijednostima, određenim slučajevima i još mnogo toga, omogućujući nam definiranje naših prilagođenih pravila.

Napokon, ako je korisnik odabrao način hosta, trebali bismo zatražiti da predaju svoje vjerodajnice. Na taj je način jedna opcija ovisna o drugoj. To ponašanje možemo postići pomoću @RequiredOnlyIf napomena:

@RequiredOnlyIf (names = {"- rdbms: host", "--host"}) @Option (type = OptionType.COMMAND, name = {"--rdbms: user", "-u", "--user "}, description =" Korisnik za prijavu na RDBMS. ", title =" RDBMS korisnik ") zaštićen String rdbmsUser; @RequiredOnlyIf (names = {"- rdbms: host", "--host"}) @Option (type = OptionType.COMMAND, name = {"--rdbms: password", "--password"}, description = "Lozinka za prijavu na RDBMS.", Title = "RDBMS lozinka") zaštićen String rdbmsPassword; 

Što ako trebamo koristiti neke upravljačke programe za obradu DB veze? A također, pretpostavimo da trebamo primiti više od jedne vrijednosti u jedan parametar. Možemo jednostavno promijeniti vrstu opcije u OptionType.ARGUMENTI ili - još bolje - prihvatite popis vrijednosti:

@Option (type = OptionType.COMMAND, name = {"--driver", "--jars"}, description = "Popis upravljačkih programa", title = "--driver --driver") zaštićeni staklenci popisa = novi ArrayList ();

Ne zaboravimo dodati naredbu za postavljanje baze podataka u našu glavnu klasu. U suprotnom, neće biti dostupan na CLI.

7. Trči

Uspjeli smo! Završili smo svoj projekt i sada ga možemo pokrenuti.

Očekivano, bez prolaska bilo kakvih parametara, Pomozite poziva se:

$ baeldung-cli upotreba: baeldung-cli [] Naredbe su: help Prikažite informacije o pomoći setup-db Postavljanje naše baze podataka setup-log Postavljanje našeg dnevnika Pogledajte 'baeldung-cli help' za više informacija o određenoj naredbi.

Ako umjesto toga izvršimo setup-log –pomoć, dobivamo:

$ baeldung-cli setup-log --help NAME baeldung-cli setup-log - postavite naš zapis SYNOPSIS baeldung-cli setup-log [-h] [-v] OPTIONS -h, --help Prikažite informacije pomoći -v, - -verbose Uključivanje / isključivanje detaljnosti dnevnika

Konačno, isporukom parametara za ove naredbe pokrenut će se ispravna poslovna logika.

8. Zaključak

U ovom smo članku izgradili jednostavno, ali moćno sučelje naredbenog retka s vrlo malo kodiranja.

Zračna knjižnica, svojim moćnim funkcionalnostima, pojednostavljuje CLI, pružajući nam opću, čistu i ponovnu infrastrukturu. Omogućuje nam, programerima, da se koncentriramo na svoju poslovnu logiku, umjesto da trošimo vrijeme na dizajniranje onoga što bi trebalo biti trivijalno.

Kao i uvijek, kod se može pronaći na GitHub-u.


$config[zx-auto] not found$config[zx-overlay] not found