Apache Commons CLI - Szybki przewodnik

Apache Commons CLI są komponentami Apache Commons, które pochodzą z Java API i zapewniają API do analizowania argumentów / opcji wiersza poleceń, które są przekazywane do programów. To API umożliwia również drukowanie pomocy związanej z dostępnymi opcjami.

Przetwarzanie wiersza poleceń składa się z trzech etapów. Te etapy wyjaśniono poniżej -

  • Etap definicji
  • Etap analizy
  • Etap przesłuchań

Etap definicji

Na etapie definiowania definiujemy opcje, które może przyjąć aplikacja i odpowiednio do nich reagujemy. Commons CLI udostępnia klasę Options, która jest kontenerem dla obiektów Option.

// create Options object
Options options = new Options();

// add a option
options.addOption("a", false, "add two numbers");

Tutaj dodaliśmy flagę opcji a, podczas gdy fałsz jako drugi parametr oznacza, że ​​opcja nie jest obowiązkowa, a trzeci parametr określa opis opcji.

Etap analizy

Na etapie parsowania analizujemy opcje przekazane przy użyciu argumentów wiersza poleceń po utworzeniu instancji parsera.

//Create a parser
CommandLineParser parser = new DefaultParser();

//parse the options passed as command line arguments
CommandLine cmd = parser.parse( options, args);

Etap przesłuchań

Na etapie przesłuchania sprawdzamy, czy dana opcja jest obecna, czy nie, a następnie odpowiednio przetwarzamy polecenie.

//hasOptions checks if option is present or not
if(cmd.hasOption("a")) {
   // add the two numbers
} else if(cmd.hasOption("m")) {
   // multiply the two numbers
}

W tym rozdziale dowiemy się o konfiguracji środowiska lokalnego Apache Commons CLI oraz o tym, jak ustawić ścieżkę Commons CLI dla Windows 2000 / XP, Windows 95/98 / ME itp. Zrozumiemy także niektóre popularne edytory java jak pobrać archiwum Commons CLI.

Konfiguracja środowiska lokalnego

Jeśli nadal chcesz skonfigurować środowisko dla języka programowania Java, w tym rozdziale znajdziesz wskazówki, jak pobrać i skonfigurować Javę na swoim komputerze. Wykonaj poniższe czynności, aby skonfigurować środowisko.

Java SE jest dostępna bezpłatnie pod linkiem https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html. Możesz więc pobrać wersję opartą na systemie operacyjnym.

Postępuj zgodnie z instrukcjami, aby pobrać Javę i uruchomić plik .exe, aby zainstalować Javę na swoim komputerze. Po zainstalowaniu Javy na komputerze należałoby ustawić zmienne środowiskowe, aby wskazywały na prawidłowe katalogi instalacyjne.

Ścieżka do systemu Windows 2000 / XP

Zakładamy, że masz zainstalowaną Javę w c:\Program Files\java\jdk informator.

  • Kliknij prawym przyciskiem myszy 'My Computer' i wybierz 'Properties'.

  • Kliknij na 'Environment variables' przycisk pod 'Advanced' patka.

  • Teraz zmień 'Path'zmienna, tak aby zawierała również ścieżkę do pliku wykonywalnego Java. Na przykład, jeśli ścieżka jest obecnie ustawiona na'C:\WINDOWS\SYSTEM32', a następnie zmień ścieżkę czytania 'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'.

Ścieżka do Windows 95/98 / ME

Zakładamy, że masz zainstalowaną Javę w c:\Program Files\java\jdk informator.

  • Edytuj plik 'C:\autoexec.bat' plik i dodaj następujący wiersz na końcu - 'SET PATH=%PATH%;C:\Program Files\java\jdk\bin'.

Ścieżka do systemów Linux, UNIX, Solaris, FreeBSD

Zmienna środowiskowa PATH powinna być ustawiona na punkt, w którym zostały zainstalowane pliki binarne Java. Zajrzyj do dokumentacji powłoki, jeśli masz z tym problem.

Na przykład, jeśli używasz bash jako powłoki, dodasz następujący wiersz na końcu swojego '.bashrc: export PATH = / path / to / java: $ PATH'

Popularne edytory Java

Do pisania programów w języku Java potrzebny jest edytor tekstu. Na rynku dostępnych jest wiele wyrafinowanych IDE. Ale na razie możesz rozważyć jedną z następujących -

  • Notepad - Na komputerze z systemem Windows możesz użyć dowolnego prostego edytora tekstu, takiego jak Notatnik (zalecany w tym samouczku), TextPad.

  • Netbeans- Jest to środowisko Java IDE o otwartym kodzie źródłowym i bezpłatne, które można pobrać ze strony www.netbeans.org/index.html .

  • Eclipse- Jest to również środowisko Java IDE opracowane przez społeczność eclipse open source i można je pobrać ze strony www.eclipse.org .

Pobierz wspólne archiwum CLI

Pobierz najnowszą wersję pliku jar Apache Common CLI z commons-cli-1.4-bin.zip . W momencie pisania tego samouczka pobraliśmy plik commons-cli-1.4-bin.zip i skopiowaliśmy go do folderu C: \> Apache.

OS Nazwa archiwum
Windows commons-cli-1.4-bin.zip
Linux commons-cli-1.4-bin.tar.gz
Prochowiec commons-cli-1.4-bin.tar.gz

Środowisko Apache Common CLI

Ustaw APACHE_HOMEzmienna środowiskowa, aby wskazać lokalizację katalogu podstawowego, w którym na komputerze jest przechowywany plik jar Apache. Załóżmy, że wyodrębniliśmy commonscollections4-4.1-bin.zip do folderu Apache w różnych systemach operacyjnych w następujący sposób -

OS Wynik
Windows Ustaw zmienną środowiskową APACHE_HOME na C: \ Apache
Linux eksportuj APACHE_HOME = / usr / local / Apache
Prochowiec eksportuj APACHE_HOME = / Library / Apache

Zmienna CLASSPATH

Ustaw CLASSPATHzmienna środowiskowa, aby wskazywała lokalizację pliku jar Common CLI. Załóżmy, że przechowujesz commons-cli-1.4.jar w folderze Apache w różnych systemach operacyjnych w następujący sposób -

OS Wynik
Windows Przechowuje boty AIML </ Ustaw zmienną środowiskową CLASSPATH na% CLASSPATH%;% APACHE_HOME% \ commons-cli-1.4.jar;.;
Linux export CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar :.
Prochowiec export CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar :.

Stwórzmy przykładową aplikację konsolową, której celem jest uzyskanie sumy przekazanych liczb lub pomnożenia przekazanych liczb na podstawie użytych opcji.

Utwórz klasę Java o nazwie CLITester.

Przykład

CLITester.java

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
public class CLITester {
   public static void main(String[] args) throws ParseException {
      //***Definition Stage***
      // create Options object
      Options options = new Options();
      
      // add option "-a"
      options.addOption("a", false, "add numbers");
      
      // add option "-m"
      options.addOption("m", false, "multiply numbers");

      //***Parsing Stage***
      //Create a parser
      CommandLineParser parser = new DefaultParser();

      //parse the options passed as command line arguments
      CommandLine cmd = parser.parse( options, args);

      //***Interrogation Stage***
      //hasOptions checks if option is present or not
      if(cmd.hasOption("a")) {
         System.out.println("Sum of the numbers: " + getSum(args));
      } else if(cmd.hasOption("m")) {
         System.out.println("Multiplication of the numbers: " + getMultiplication(args));
      }
   }
   public static int getSum(String[] args) {
      int sum = 0;
      for(int i = 1; i < args.length ; i++) {
         sum += Integer.parseInt(args[i]);
      }
      return sum;
   }
   public static int getMultiplication(String[] args) {
      int multiplication = 1;
      for(int i = 1; i < args.length ; i++) {
         multiplication *= Integer.parseInt(args[i]);
      }
      return multiplication;
   }
}

Wynik

Uruchom plik, przekazując opcję -a jako opcję i liczby, aby uzyskać wynikową sumę liczb.

java CLITester -a 1 2 3 4 5
Sum of the numbers: 15

Uruchom plik, przekazując opcję -m jako opcję i liczby, aby uzyskać wynik pomnożenia liczb.

java CLITester -m 1 2 3 4 5
Multiplication of the numbers: 120

Obiekt opcji służy do reprezentowania opcji przekazanej do programu wiersza poleceń. Poniżej przedstawiono różne właściwości, które posiada obiekt Option.

Sr.No Nazwa (typ) & amps; Opis
1

opt (String)

Ciąg identyfikacyjny Opcji.

2

longOpt (String)

Alias ​​i bardziej opisowy ciąg identyfikacyjny.

3

description (String)

Opis funkcji opcji.

4

required (boolean)

Flaga, aby sprawdzić, czy opcja musi pojawić się w wierszu poleceń.

5

arg (boolean)

Flaga, aby sprawdzić, czy opcja przyjmuje argument.

6

args (boolean)

Flaga, aby sprawdzić, czy opcja przyjmuje więcej niż jeden argument.

7

optionalArg (boolean)

Flaga, aby sprawdzić, czy argument opcji jest opcjonalny.

8

argName (String)

Nazwa wartości argumentu dla instrukcji użycia.

9

valueSeparator (char)

Wartość znaku używana do podziału łańcucha argumentu.

10

type (Object)

Typ argumentu.

11

value (String)

Wartość opcji.

12

values (String[])

Wartości opcji.

Opcja logiczna jest reprezentowana w wierszu poleceń przez jej obecność. Na przykład, jeśli opcja jest obecna, jej wartość jest prawdziwa, w przeciwnym razie jest uważana za fałsz. Rozważmy następujący przykład, w którym wypisujemy aktualną datę i jeśli występuje flaga -t. Wtedy też wydrukujemy czas.

Przykład

CLITester.java

import java.util.Calendar;
import java.util.Date;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLITester {
   public static void main(String[] args) throws ParseException {
      Options options = new Options();
      options.addOption("t", false, "display time");
      
      CommandLineParser parser = new DefaultParser();
      CommandLine cmd = parser.parse( options, args);

      Calendar date = Calendar.getInstance();
      int day = date.get(Calendar.DAY_OF_MONTH);
      int month = date.get(Calendar.MONTH);
      int year = date.get(Calendar.YEAR);

      int hour = date.get(Calendar.HOUR);
      int min = date.get(Calendar.MINUTE);
      int sec = date.get(Calendar.SECOND);

      System.out.print(day + "/" + month + "/" + year);
      if(cmd.hasOption("t")) {
         System.out.print(" " + hour + ":" + min + ":" + sec);
      }
   }
}

Wynik

Uruchom plik bez przekazywania żadnej opcji i zobacz wynik.

java CLITester
12/11/2017

Uruchom plik, przekazując -t jako opcję i zobacz wynik.

java CLITester
12/11/2017 4:13:10

Opcja argumentu jest reprezentowana w wierszu poleceń przez swoją nazwę i odpowiadającą jej wartość. Na przykład, jeśli opcja jest obecna, to użytkownik musi przekazać jej wartość. Rozważmy następujący przykład, jeśli drukujemy logi do jakiegoś pliku, dla którego chcemy, aby użytkownik wprowadził nazwę pliku dziennika z argumentem opcja logFile.

Przykład

CLITester.java

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLITester {
   public static void main(String[] args) throws ParseException {
      Options options = new Options();
      Option logfile = Option.builder()
         .longOpt("logFile")
         .argName("file" )
         .hasArg()
         .desc("use given file for log" )
         .build();

      options.addOption(logfile);
      CommandLineParser parser = new DefaultParser();
      CommandLine cmd = parser.parse( options, args);
      
      // has the logFile argument been passed?
      if(cmd.hasOption("logFile")) {
         //get the logFile argument passed
         System.out.println( cmd.getOptionValue( "logFile" ) );
      }
   }
}

Wynik

Uruchom plik, przekazując --logFile jako opcję, nazwę pliku jako wartość opcji i zobacz wynik.

java CLITester --logFile test.log
test.log

Opcja Właściwości jest reprezentowana w wierszu poleceń za pomocą jej nazwy i odpowiednich właściwości, takich jak składnia, która jest podobna do pliku właściwości Java. Rozważ poniższy przykład, jeśli przekazujemy opcje takie jak -DrollNo = 1 -Dclass = VI -Dname = Mahesh, powinniśmy przetwarzać każdą wartość jako właściwości. Zobaczmy logikę implementacji w akcji.

Przykład

CLITester.java

import java.util.Properties;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLITester {
   public static void main(String[] args) throws ParseException {
      Options options = new Options();
      Option propertyOption = Option.builder()
         .longOpt("D")
         .argName("property=value" )
         .hasArgs()
         .valueSeparator()
         .numberOfArgs(2)
         .desc("use value for given properties" )
         .build();
      
      options.addOption(propertyOption);
      CommandLineParser parser = new DefaultParser();
      CommandLine cmd = parser.parse( options, args);
      
      if(cmd.hasOption("D")) {
         Properties properties = cmd.getOptionProperties("D");
         System.out.println("Class: " + properties.getProperty("class"));
         System.out.println("Roll No: " + properties.getProperty("rollNo"));
         System.out.println("Name: " + properties.getProperty("name"));
      }
   }
}

Wynik

Uruchom plik, przekazując opcje jako pary klucz-wartość i zobacz wynik.

java CLITester -DrollNo = 1 -Dclass = VI -Dname = Mahesh
Class: VI
Roll No: 1
Name: Mahesh

Parser Posix jest używany do analizowania przekazanych argumentów Posix. Jest teraz przestarzały i zastąpiony przez DefaultParser.

Przykład

CLITester.java

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;

public class CLITester {
   public static void main(String[] args) throws ParseException {
      
      //Create posix like options
      Options posixOptions = new Options();
      posixOptions.addOption("D", false, "Display");
      posixOptions.addOption("A", false, "Act");
      
      CommandLineParser posixParser = new PosixParser();
      
      CommandLine cmd = posixParser.parse(posixOptions, args);
      
      if( cmd.hasOption("D") ) {
         System.out.println("D option was used.");
      }
      if( cmd.hasOption("A") ) {
         System.out.println("A option was used.");
      }
   }
}

Wynik

Uruchom plik, przekazując -D -A jako opcje i zobacz wynik.

java CLITester -D -A
D option was used.
A option was used.

Uruchom plik, przekazując opcję --D jako opcję i zobacz wynik.

java CLITester --D
D option was used.

Parser GNU jest używany do analizowania przekazanych argumentów GNU. Jest teraz przestarzały i zastąpiony przez DefaultParser.

Przykład

CLITester.java

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLITester {
   public static void main(String[] args) throws ParseException {
      
      //Create GNU like options
      Options gnuOptions = new Options();
      gnuOptions.addOption("p", "print", false, "Print")
         .addOption("g", "gui", false, "GUI")
         .addOption("n", true, "Scale");

      CommandLineParser gnuParser = new GnuParser();
      CommandLine cmd = gnuParser.parse(gnuOptions, args);
      
      if( cmd.hasOption("p") ) {
         System.out.println("p option was used.");
      }
      if( cmd.hasOption("g") ) {
         System.out.println("g option was used.");
      }
      if( cmd.hasOption("n") ) {
         System.out.println("Value passed: " + cmd.getOptionValue("n"));
      }
   }
}

Wynik

Uruchom plik podczas przekazywania -p -g -n 10 jako opcję i zobacz wynik.

java CLITester -p -g -n 10
p option was used.
g option was used.
Value passed: 10

Apache Commons CLI zapewnia klasę HelpFormatter do drukowania instrukcji użycia argumentów wiersza poleceń. Zobacz przykład podany poniżej -

Przykład

CLITester.java

import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLITester {
   public static void main(String[] args) throws ParseException {
	
      Options options = new Options();
      options.addOption("p", "print", false, "Send print request to printer.")
         .addOption("g", "gui", false, "Show GUI Application")
         .addOption("n", true, "No. of copies to print");
			
      HelpFormatter formatter = new HelpFormatter();
      formatter.printHelp("CLITester", options);
   }
}

Wynik

Uruchom plik i zobacz wynik.

java CLITester
usage: CLITester
-g,--gui Show GUI Application
-n <arg> No. of copies to print
-p,--print Send print request to printer.

Apache Commons CLI zapewnia klasę HelpFormatter do drukowania pomocy związanej z argumentami wiersza poleceń. Zobacz przykład.

Przykład

CLITester.java

import java.io.PrintWriter;

import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLITester {
   public static void main(String[] args) throws ParseException {
      
      Options options = new Options();
      options.addOption("p", "print", false, "Send print request to printer.")
         .addOption("g", "gui", false, "Show GUI Application")
         .addOption("n", true, "No. of copies to print");
      
      HelpFormatter formatter = new HelpFormatter();

      final PrintWriter writer = new PrintWriter(System.out);
      formatter.printUsage(writer,80,"CLITester", options);
      writer.flush();
   }
}

Wynik

Uruchom plik i zobacz wynik.

java CLITester
usage: CLITester [-g] [-n <arg>] [-p]