Apache Commons CLI - Hızlı Kılavuz

Apache Commons CLI, Java API'den türetilen ve programlara aktarılan komut satırı argümanlarını / seçeneklerini ayrıştırmak için bir API sağlayan Apache Commons bileşenleridir. Bu API ayrıca mevcut seçeneklerle ilgili yardımın yazdırılmasını sağlar.

Komut satırı işleme üç aşamadan oluşur. Bu aşamalar aşağıda açıklanmıştır -

  • Tanım Aşaması
  • Ayrıştırma Aşaması
  • Sorgulama Aşaması

Tanım Aşaması

Tanımlama aşamasında, bir uygulamanın alabileceği seçenekleri tanımlıyor ve ona göre hareket ediyoruz. Commons CLI, Option nesneleri için bir kap olan Options sınıfını sağlar.

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

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

Burada bir seçenek bayrağı ekledik, ikinci parametre olarak false, seçeneğin zorunlu olmadığını ve üçüncü parametre seçeneğin açıklamasını belirtir.

Ayrıştırma Aşaması

Ayrıştırma aşamasında, bir ayrıştırıcı örneği oluşturduktan sonra komut satırı argümanları kullanılarak geçirilen seçenekleri ayrıştırıyoruz.

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

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

Sorgulama Aşaması

Sorgulama aşamasında, belirli bir seçeneğin olup olmadığını kontrol edip ardından komutu ona göre işleriz.

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

Bu bölümde, Apache Commons CLI'nin yerel ortam kurulumunu ve Windows 2000 / XP, Windows 95/98 / ME vb. İçin Commons CLI yolunun nasıl kurulacağını öğreneceğiz. Ayrıca bazı popüler java editörlerini ve Commons CLI arşivi nasıl indirilir.

Yerel Ortam Kurulumu

Hala ortamınızı Java programlama dili için kurmayı düşünüyorsanız, bu bölüm Java'yı makinenize nasıl indirip kuracağınız konusunda size rehberlik edecektir. Ortamı kurmak için lütfen aşağıda belirtilen adımları izleyin.

Java SE, bağlantıdan ücretsiz olarak edinilebilir https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html. Böylece işletim sisteminize göre bir sürümü indirebilirsiniz.

Java'yı indirmek için talimatları izleyin ve makinenize Java'yı yüklemek için .exe dosyasını çalıştırın. Java'yı makinenize yükledikten sonra, ortam değişkenlerini doğru yükleme dizinlerini gösterecek şekilde ayarlamanız gerekir.

Windows 2000 / XP için Yol

Java'yı şuraya yüklediğinizi varsayıyoruz: c:\Program Files\java\jdk dizin.

  • Sağ tıklayın 'My Computer' ve seçin 'Properties'.

  • Tıkla 'Environment variables' altındaki düğme 'Advanced' sekmesi.

  • Şimdi değiştir 'Path'değişken, böylece Java yürütülebilir dosyasının yolunu da içerir. Örneğin, yol şu anda şu şekilde ayarlanmışsa'C:\WINDOWS\SYSTEM32', sonra okuma yolunu değiştir 'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'.

Windows 95/98 / ME için Yol

Java'yı şuraya yüklediğinizi varsayıyoruz: c:\Program Files\java\jdk dizin.

  • Düzenleyin 'C:\autoexec.bat' dosyasını açın ve sonuna aşağıdaki satırı ekleyin - 'SET PATH=%PATH%;C:\Program Files\java\jdk\bin'.

Linux, UNIX, Solaris, FreeBSD için yol

PATH ortam değişkeni, Java ikili dosyalarının kurulu olduğu noktaya ayarlanmalıdır. Bunu yapmakta sorun yaşıyorsanız, kabuk belgelerinize bakın.

Örneğin, kabuğunuz olarak bash kullanırsanız, aşağıdaki satırı '.bashrc: export PATH = / path / to / java: $ PATH' satırınızın sonuna eklersiniz.

Popüler Java Editörleri

Java programlarınızı yazmak için bir metin düzenleyiciye ihtiyacınız var. Piyasada birçok sofistike IDE mevcuttur. Ancak şimdilik aşağıdakilerden birini düşünebilirsiniz -

  • Notepad - Windows makinede, Not Defteri (Bu eğitim için önerilir), TextPad gibi herhangi bir basit metin düzenleyiciyi kullanabilirsiniz.

  • Netbeans- www.netbeans.org/index.html adresinden indirilebilen, açık kaynaklı ve ücretsiz bir Java IDE'dir .

  • Eclipse- Aynı zamanda eclipse açık kaynak topluluğu tarafından geliştirilmiş bir Java IDE'dir ve www.eclipse.org adresinden indirilebilir .

Ortak CLI Arşivini İndirin

Apache Common CLI jar dosyasının en son sürümünü commons-cli-1.4-bin.zip adresinden indirin . Bu öğreticiyi yazarken, commons-cli-1.4-bin.zip'i indirdik ve C: \> Apache klasörüne kopyaladık.

işletim sistemi Arşiv adı
pencereler commons-cli-1.4-bin.zip
Linux commons-cli-1.4-bin.tar.gz
Mac commons-cli-1.4-bin.tar.gz

Apache Ortak CLI Ortamı

Yı kur APACHE_HOMEortam değişkeni, Apache jar'in makinenizde depolandığı temel dizin konumuna işaret eder. Commonscollections4-4.1-bin.zip dosyasını çeşitli İşletim Sistemlerinde Apache klasörüne aşağıdaki gibi çıkardığımızı varsayalım -

işletim sistemi Çıktı
pencereler APACHE_HOME ortam değişkenini C: \ Apache olarak ayarlayın
Linux APACHE_HOME = / usr / local / Apache'yi dışa aktar
Mac dışa aktar APACHE_HOME = / Kitaplık / Apache

CLASSPATH Değişkeni

Yı kur CLASSPATHCommon CLI kavanoz konumuna işaret edecek ortam değişkeni. Commons-cli-1.4.jar dosyasını çeşitli İşletim Sistemlerinde Apache klasöründe aşağıdaki gibi depoladığınızı varsayalım -

işletim sistemi Çıktı
pencereler AIML botlarını depolar </ CLASSPATH ortam değişkenini% CLASSPATH%;% APACHE_HOME% \ commons-cli-1.4.jar;.;
Linux dışa aktar CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar :.
Mac dışa aktar CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar :.

Kullanılan seçeneklere göre geçen sayıların toplamını veya geçen sayıların çarpımını elde etmek olan örnek bir konsol tabanlı uygulama oluşturalım.

CLITester adlı bir java sınıfı oluşturun.

Misal

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

Çıktı

Sonuç olarak sayıların toplamını almak için -a seçeneği ve sayılar olarak geçerken dosyayı çalıştırın.

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

Sonuç olarak sayıların çarpımını elde etmek için seçenek olarak -m ve sayıları geçerken dosyayı çalıştırın.

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

Seçenek nesnesi, komut satırı programına aktarılan Seçeneği temsil etmek için kullanılır. Aşağıda bir Option nesnesinin sahip olduğu çeşitli özellikler yer almaktadır.

Sr.No İsim (Tür) & s; Açıklama
1

opt (String)

Seçeneğin kimlik dizesi.

2

longOpt (String)

Takma ad ve daha açıklayıcı kimlik dizesi.

3

description (String)

Seçeneğin işlevinin açıklaması.

4

required (boolean)

Seçeneğin komut satırında görünmesi gerekip gerekmediğini kontrol etmek için işaretleyin.

5

arg (boolean)

Seçeneğin bir argüman alıp almadığını kontrol etmek için işaretleyin.

6

args (boolean)

Seçeneğin birden fazla argüman alıp almadığını kontrol etmek için işaretleyin.

7

optionalArg (boolean)

Seçeneğin bağımsız değişkeninin isteğe bağlı olup olmadığını kontrol etmek için işaretleyin.

8

argName (String)

Kullanım ifadesi için bağımsız değişken değerinin adı.

9

valueSeparator (char)

Bağımsız değişken dizesini bölmek için kullanılan karakter değeri.

10

type (Object)

Bağımsız değişken türü.

11

value (String)

Opsiyon değeri.

12

values (String[])

Seçeneğin değerleri.

Bir boole seçeneği, bir komut satırında varlığıyla temsil edilir. Örneğin, seçenek mevcutsa değeri doğrudur, aksi takdirde yanlış olarak kabul edilir. Şu anki tarihi yazdırdığımız ve if -t bayrağının mevcut olduğu aşağıdaki örneği düşünün. Sonra da zamanı basacağız.

Misal

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

Çıktı

Herhangi bir seçeneği geçmeden dosyayı çalıştırın ve sonucu görün.

java CLITester
12/11/2017

Seçenek olarak -t geçerken dosyayı çalıştırın ve sonucu görün.

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

Bir Argüman seçeneği, bir komut satırında adı ve karşılık gelen değeriyle temsil edilir. Örneğin, seçenek mevcutsa, kullanıcı değerini iletmelidir. Günlükleri bir dosyaya yazdırıyorsak, bunun için kullanıcının log dosyasının adını argüman seçeneği logFile ile girmesini istiyorsak aşağıdaki örneği düşünün.

Misal

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

Çıktı

Seçenek olarak --logFile'ı geçerken dosyayı çalıştırın, dosyanın adı seçeneğin değeri olarak ve sonucu görün.

java CLITester --logFile test.log
test.log

Özellikler seçeneği, komut satırında adı ve java özellikler dosyasına benzer sözdizimi gibi karşılık gelen özellikleriyle temsil edilir. Aşağıdaki örneği ele alalım, -DrollNo = 1 -Dclass = VI -Dname = Mahesh gibi seçenekleri iletiyorsak, her bir değeri özellik olarak işlemeliyiz. Uygulama mantığını iş başında görelim.

Misal

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

Çıktı

Seçenekleri anahtar değer çiftleri olarak iletirken dosyayı çalıştırın ve sonucu görün.

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

Posix ayrıştırıcısı, Posix'i aktarılan argümanlar gibi ayrıştırmak için kullanılır. Artık kullanımdan kaldırılmıştır ve DefaultParser ile değiştirilmiştir.

Misal

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

Çıktı

Seçenek olarak -D -A'yı geçerken dosyayı çalıştırın ve sonucu görün.

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

Seçenek olarak --D'yi geçerken dosyayı çalıştırın ve sonucu görün.

java CLITester --D
D option was used.

Bir GNU çözümleyicisi, aktarılan argümanlar gibi gnu'yu ayrıştırmak için kullanılır. Artık kullanımdan kaldırılmıştır ve DefaultParser ile değiştirilmiştir.

Misal

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

Çıktı

Seçenek olarak -p -g -n 10'u geçerken dosyayı çalıştırın ve sonucu görün.

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

Apache Commons CLI, komut satırı argümanlarının kullanım kılavuzunu yazdırmak için HelpFormatter sınıfını sağlar. Aşağıda verilen örneğe bakın -

Misal

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

Çıktı

Dosyayı çalıştırın ve sonucu görün.

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, komut satırı argümanlarıyla ilgili yardımı yazdırmak için HelpFormatter sınıfını sağlar. Örneğe bakın.

Misal

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

Çıktı

Dosyayı çalıştırın ve sonucu görün.

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