CLI di Apache Commons - Guida rapida

La CLI di Apache Commons sono i componenti di Apache Commons che derivano dall'API Java e fornisce un'API per analizzare gli argomenti / opzioni della riga di comando che vengono passati ai programmi. Questa API consente anche di stampare la guida relativa alle opzioni disponibili.

L'elaborazione della riga di comando comprende tre fasi. Queste fasi sono spiegate di seguito:

  • Fase di definizione
  • Fase di analisi
  • Fase degli interrogatori

Fase di definizione

In fase di definizione, definiamo le opzioni che un'applicazione può adottare e agiamo di conseguenza. Commons CLI fornisce la classe Options, che è un contenitore per oggetti Option.

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

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

Qui abbiamo aggiunto un flag di opzione a, mentre false come secondo parametro, significa che l'opzione non è obbligatoria e il terzo parametro indica la descrizione dell'opzione.

Fase di analisi

Nella fase di analisi, analizziamo le opzioni passate utilizzando gli argomenti della riga di comando dopo aver creato un'istanza del parser.

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

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

Fase degli interrogatori

Nella fase di interrogazione, controlliamo se una particolare opzione è presente o meno e quindi elaboriamo il comando di conseguenza.

//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
}

In questo capitolo, apprenderemo la configurazione dell'ambiente locale di Apache Commons CLI e come impostare il percorso di Commons CLI per Windows 2000 / XP, Windows 95/98 / ME ecc. Comprenderemo anche alcuni popolari editor java e come scaricare l'archivio della CLI di Commons.

Configurazione dell'ambiente locale

Se sei ancora disposto a configurare il tuo ambiente per il linguaggio di programmazione Java, questo capitolo ti guiderà su come scaricare e configurare Java sulla tua macchina. Seguire i passaggi indicati di seguito per configurare l'ambiente.

Java SE è disponibile gratuitamente dal collegamento https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html. Quindi puoi scaricare una versione basata sul tuo sistema operativo.

Segui le istruzioni per scaricare Java ed esegui il file .exe per installare Java sulla tua macchina. Dopo aver installato Java sulla macchina, è necessario impostare le variabili di ambiente in modo che puntino alle directory di installazione corrette.

Percorso per Windows 2000 / XP

Supponiamo che tu abbia installato Java in c:\Program Files\java\jdk directory.

  • Fare clic con il tasto destro su 'My Computer' e seleziona 'Properties'.

  • Clicca sul 'Environment variables' pulsante sotto il 'Advanced' tab.

  • Ora, modifica il file 'Path'variabile, in modo che contenga anche il percorso dell'eseguibile Java. Esempio, se il percorso è attualmente impostato su'C:\WINDOWS\SYSTEM32', quindi modifica il percorso in lettura 'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'.

Percorso per Windows 95/98 / ME

Supponiamo che tu abbia installato Java in c:\Program Files\java\jdk directory.

  • Modifica il file 'C:\autoexec.bat' file e aggiungi la seguente riga alla fine - 'SET PATH=%PATH%;C:\Program Files\java\jdk\bin'.

Percorso per Linux, UNIX, Solaris, FreeBSD

La variabile d'ambiente PATH dovrebbe essere impostata in modo che punti in cui sono stati installati i binari Java. Fare riferimento alla documentazione della shell, se si hanno problemi a farlo.

Esempio, se usi bash come shell, aggiungi la seguente riga alla fine di '.bashrc: export PATH = / path / to / java: $ PATH'

Editor Java popolari

Per scrivere i tuoi programmi Java, hai bisogno di un editor di testo. Ci sono molti IDE sofisticati disponibili sul mercato. Ma per ora, puoi considerare uno dei seguenti:

  • Notepad - Su una macchina Windows puoi utilizzare qualsiasi semplice editor di testo come Blocco note (consigliato per questo tutorial), TextPad.

  • Netbeans- È un IDE Java open-source e gratuito che può essere scaricato da www.netbeans.org/index.html .

  • Eclipse- È anche un IDE Java sviluppato dalla comunità open source di eclipse e può essere scaricato da www.eclipse.org .

Scarica Common CLI Archive

Scarica l'ultima versione del file jar della CLI comune di Apache da commons-cli-1.4-bin.zip . Al momento della stesura di questo tutorial, abbiamo scaricato commons-cli-1.4-bin.zip e copiato nella cartella C: \> Apache.

OS Nome dell'archivio
finestre commons-cli-1.4-bin.zip
Linux commons-cli-1.4-bin.tar.gz
Mac commons-cli-1.4-bin.tar.gz

Ambiente CLI comune di Apache

Impostare il APACHE_HOMEvariabile di ambiente in modo che punti alla posizione della directory di base in cui è archiviato il jar di Apache sulla macchina. Supponiamo di aver estratto commonscollections4-4.1-bin.zip nella cartella Apache su vari sistemi operativi come segue:

OS Produzione
finestre Imposta la variabile d'ambiente APACHE_HOME su C: \ Apache
Linux esportare APACHE_HOME = / usr / local / Apache
Mac export APACHE_HOME = / Library / Apache

CLASSPATH Variabile

Impostare il CLASSPATHvariabile di ambiente in modo che punti alla posizione del jar della CLI comune. Supponiamo di aver memorizzato commons-cli-1.4.jar nella cartella Apache su vari sistemi operativi come segue:

OS Produzione
finestre Memorizza i bot AIML </ Imposta la variabile d'ambiente CLASSPATH su% CLASSPATH%;% APACHE_HOME% \ commons-cli-1.4.jar;.;
Linux export CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar :.
Mac export CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar :.

Creiamo un'applicazione basata su console di esempio, il cui scopo è ottenere la somma dei numeri passati o la moltiplicazione dei numeri passati in base alle opzioni utilizzate.

Crea una classe java denominata CLITester.

Esempio

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;
   }
}

Produzione

Esegui il file, passando -a come opzione e numeri per ottenere la somma dei numeri come risultato.

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

Esegui il file, passando -m come opzione e numeri per ottenere la moltiplicazione dei numeri come risultato.

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

L'oggetto Opzione viene utilizzato per rappresentare l'opzione passata al programma della riga di comando. Di seguito sono riportate varie proprietà che un oggetto Option possiede.

Suor n Nome (tipo) e amp; Descrizione
1

opt (String)

Stringa di identificazione dell'Opzione.

2

longOpt (String)

Alias ​​e stringa di identificazione più descrittiva.

3

description (String)

Descrizione della funzione dell'opzione.

4

required (boolean)

Flag per verificare se l'opzione deve essere visualizzata sulla riga di comando.

5

arg (boolean)

Flag per verificare se l'opzione accetta un argomento.

6

args (boolean)

Flag per verificare se l'opzione richiede più di un argomento.

7

optionalArg (boolean)

Flag per verificare se l'argomento dell'opzione è facoltativo.

8

argName (String)

Nome del valore dell'argomento per la dichiarazione di utilizzo.

9

valueSeparator (char)

Il valore del carattere utilizzato per dividere la stringa dell'argomento.

10

type (Object)

Tipo di argomento.

11

value (String)

Valore dell'opzione.

12

values (String[])

Valori dell'opzione.

Un'opzione booleana è rappresentata su una riga di comando dalla sua presenza. Ad esempio, se l'opzione è presente, il suo valore è vero, altrimenti è considerato falso. Considera il seguente esempio, dove stiamo stampando la data corrente e se è presente il flag -t. Quindi stamperemo anche il tempo.

Esempio

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);
      }
   }
}

Produzione

Esegui il file senza passare alcuna opzione e guarda il risultato.

java CLITester
12/11/2017

Esegui il file, passando -t come opzione e vedi il risultato.

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

Un'opzione Argomento è rappresentata su una riga di comando dal suo nome e dal suo valore corrispondente. Ad esempio, se l'opzione è presente, l'utente deve passare il suo valore. Considera il seguente esempio, se stiamo stampando log su un file, per il quale, vogliamo che l'utente inserisca il nome del file di log con l'argomento opzione logFile.

Esempio

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" ) );
      }
   }
}

Produzione

Esegui il file, passando --logFile come opzione, nome del file come valore dell'opzione e vedi il risultato.

java CLITester --logFile test.log
test.log

Un'opzione Proprietà è rappresentata su una riga di comando dal suo nome e dalle proprietà corrispondenti come la sintassi, che è simile al file delle proprietà Java. Considera il seguente esempio, se stiamo passando opzioni come -DrollNo = 1 -Dclass = VI -Dname = Mahesh, dovremmo elaborare ogni valore come proprietà. Vediamo la logica di implementazione in azione.

Esempio

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"));
      }
   }
}

Produzione

Eseguire il file, passando le opzioni come coppie di valori chiave e vedere il risultato.

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

Un parser Posix viene utilizzato per analizzare Posix come gli argomenti passati. Ora è deprecato e viene sostituito da DefaultParser.

Esempio

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.");
      }
   }
}

Produzione

Esegui il file passando -D -A come opzioni e vedi il risultato.

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

Esegui il file mentre passi --D come opzione e guarda il risultato.

java CLITester --D
D option was used.

Un parser GNU viene utilizzato per analizzare gli argomenti passati come gnu. Ora è deprecato e viene sostituito da DefaultParser.

Esempio

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"));
      }
   }
}

Produzione

Eseguire il file passando -p -g -n 10 come opzione e vedere il risultato.

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

La CLI di Apache Commons fornisce la classe HelpFormatter per stampare la guida all'uso degli argomenti della riga di comando. Vedere l'esempio riportato di seguito -

Esempio

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);
   }
}

Produzione

Esegui il file e guarda il risultato.

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

La CLI di Apache Commons fornisce la classe HelpFormatter per stampare la guida relativa agli argomenti della riga di comando. Guarda l'esempio.

Esempio

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();
   }
}

Produzione

Esegui il file e guarda il risultato.

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