Apache Commons CLI - คู่มือฉบับย่อ

Apache Commons CLI เป็นส่วนประกอบของ Apache Commons ซึ่งได้มาจาก Java API และจัดเตรียม API เพื่อแยกวิเคราะห์อาร์กิวเมนต์ / อ็อพชันบรรทัดคำสั่งที่ส่งผ่านไปยังโปรแกรม API นี้ยังช่วยในการพิมพ์ความช่วยเหลือที่เกี่ยวข้องกับตัวเลือกต่างๆ

การประมวลผลบรรทัดคำสั่งประกอบด้วยสามขั้นตอน ขั้นตอนเหล่านี้มีคำอธิบายด้านล่าง -

  • เวทีนิยาม
  • ขั้นตอนการแยกวิเคราะห์
  • เวทีซักถาม

เวทีนิยาม

ในขั้นตอนการนิยามเรากำหนดตัวเลือกที่แอปพลิเคชันสามารถใช้และดำเนินการตามนั้น Commons CLI จัดเตรียมคลาส Options ซึ่งเป็นคอนเทนเนอร์สำหรับอ็อบเจ็กต์ Option

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

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

ที่นี่เราได้เพิ่มอ็อพชันแฟล็ก a ในขณะที่เป็นเท็จเป็นพารามิเตอร์ที่สองหมายความว่าอ็อพชันไม่บังคับและพารามิเตอร์ที่สามระบุคำอธิบายของอ็อพชัน

ขั้นตอนการแยกวิเคราะห์

ในขั้นตอนการแยกวิเคราะห์เราจะแยกวิเคราะห์ตัวเลือกที่ส่งผ่านโดยใช้อาร์กิวเมนต์บรรทัดคำสั่งหลังจากสร้างอินสแตนซ์ตัวแยกวิเคราะห์

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

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

เวทีซักถาม

ในขั้นตอนการซักถามเราจะตรวจสอบว่ามีตัวเลือกเฉพาะหรือไม่จากนั้นประมวลผลคำสั่งตามนั้น

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

ในบทนี้เราจะเรียนรู้เกี่ยวกับการตั้งค่าสภาพแวดล้อมภายในของ Apache Commons CLI และวิธีตั้งค่าเส้นทางของ Commons CLI สำหรับ Windows 2000 / XP, Windows 95/98 / ME เป็นต้นนอกจากนี้เรายังจะเข้าใจเกี่ยวกับตัวแก้ไขจาวายอดนิยมและ วิธีดาวน์โหลดไฟล์ Commons CLI archive

การตั้งค่าสภาพแวดล้อมท้องถิ่น

หากคุณยังเต็มใจที่จะตั้งค่าสภาพแวดล้อมของคุณสำหรับภาษาโปรแกรม Java บทนี้จะแนะนำคุณเกี่ยวกับวิธีดาวน์โหลดและตั้งค่า Java บนเครื่องของคุณ โปรดปฏิบัติตามขั้นตอนด้านล่างเพื่อตั้งค่าสภาพแวดล้อม

Java SE สามารถใช้ได้อย่างอิสระจากลิงค์ https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html. คุณจึงสามารถดาวน์โหลดเวอร์ชันตามระบบปฏิบัติการของคุณได้

ทำตามคำแนะนำเพื่อดาวน์โหลด Java และเรียกใช้. exe เพื่อติดตั้ง Java บนเครื่องของคุณ เมื่อคุณติดตั้ง Java บนเครื่องของคุณแล้วคุณจะต้องตั้งค่าตัวแปรสภาพแวดล้อมให้ชี้ไปที่ไดเร็กทอรีการติดตั้งที่ถูกต้อง

เส้นทางสำหรับ Windows 2000 / XP

เราสมมติว่าคุณได้ติดตั้ง Java ใน c:\Program Files\java\jdk ไดเรกทอรี

  • คลิกขวาที่ 'My Computer' และเลือก 'Properties'.

  • คลิกที่ 'Environment variables' ใต้ปุ่ม 'Advanced' แท็บ

  • ตอนนี้แก้ไข 'Path'ตัวแปรเพื่อให้มีพา ธ ไปยังไฟล์ปฏิบัติการ Java ตัวอย่างเช่นหากเส้นทางถูกตั้งค่าเป็น'C:\WINDOWS\SYSTEM32'จากนั้นเปลี่ยนเส้นทางของคุณเพื่ออ่าน 'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'.

เส้นทางสำหรับ Windows 95/98 / ME

เราสมมติว่าคุณได้ติดตั้ง Java ใน c:\Program Files\java\jdk ไดเรกทอรี

  • แก้ไขไฟล์ 'C:\autoexec.bat' ไฟล์และเพิ่มบรรทัดต่อไปนี้ในตอนท้าย - 'SET PATH=%PATH%;C:\Program Files\java\jdk\bin'.

เส้นทางสำหรับ Linux, UNIX, Solaris, FreeBSD

ควรตั้งค่า PATH ตัวแปรสภาพแวดล้อมเป็นจุดที่ติดตั้งไบนารี Java โปรดดูเอกสารประกอบเชลล์ของคุณหากคุณมีปัญหาในการดำเนินการนี้

ตัวอย่างเช่นถ้าคุณใช้ bash เป็นเชลล์ของคุณคุณจะต้องเพิ่มบรรทัดต่อไปนี้ต่อท้าย '.bashrc: export PATH = / path / to / java: $ PATH'

บรรณาธิการ Java ยอดนิยม

ในการเขียนโปรแกรม Java คุณต้องมีโปรแกรมแก้ไขข้อความ มี IDE ที่ซับซ้อนมากมายในตลาด แต่ในตอนนี้คุณสามารถพิจารณาข้อใดข้อหนึ่งต่อไปนี้ -

  • Notepad - บนเครื่อง Windows คุณสามารถใช้โปรแกรมแก้ไขข้อความง่ายๆเช่น Notepad (แนะนำสำหรับบทช่วยสอนนี้), TextPad

  • Netbeans- มันเป็น Java IDE ที่เป็นโอเพนซอร์สและฟรีซึ่งสามารถดาวน์โหลดได้จากwww.netbeans.org/index.html

  • Eclipse- นอกจากนี้ยังเป็น Java IDE พัฒนาโดยชุมชนคราสเปิดแหล่งที่มาและสามารถดาวน์โหลดได้จากwww.eclipse.org

ดาวน์โหลด Common CLI Archive

ดาวน์โหลดเวอร์ชันล่าสุดของไฟล์ขวด Apache ทั่วไป CLI จากcommons-cli-1.4-bin.zip ในขณะที่เขียนบทช่วยสอนนี้เราได้ดาวน์โหลด commons-cli-1.4-bin.zip และคัดลอกลงในโฟลเดอร์ C: \> Apache

ระบบปฏิบัติการ ชื่อที่เก็บถาวร
Windows commons-cli-1.4-bin.zip
ลินุกซ์ commons-cli-1.4-bin.tar.gz
Mac commons-cli-1.4-bin.tar.gz

Apache Common CLI Environment

ตั้งค่า APACHE_HOMEตัวแปรสภาพแวดล้อมเพื่อชี้ไปยังตำแหน่งไดเร็กทอรีฐานโดยที่ Apache jar จะถูกเก็บไว้ในเครื่องของคุณ สมมติว่าเราได้แยก commonscollections4-4.1-bin.zip ในโฟลเดอร์ Apache บนระบบปฏิบัติการต่างๆดังนี้ -

ระบบปฏิบัติการ เอาต์พุต
Windows ตั้งค่าตัวแปรสภาพแวดล้อม APACHE_HOME เป็น C: \ Apache
ลินุกซ์ ส่งออก APACHE_HOME = / usr / local / Apache
Mac ส่งออก APACHE_HOME = / Library / Apache

ตัวแปร CLASSPATH

ตั้งค่า CLASSPATHตัวแปรสภาพแวดล้อมเพื่อชี้ไปยังตำแหน่งโถ CLI ทั่วไป สมมติว่าคุณเก็บ commons-cli-1.4.jar ไว้ในโฟลเดอร์ Apache บนระบบปฏิบัติการต่างๆดังนี้ -

ระบบปฏิบัติการ เอาต์พุต
Windows เก็บบอท AIML </ ตั้งค่าตัวแปรสภาพแวดล้อม CLASSPATH เป็น% CLASSPATH%;% APACHE_HOME% \ commons-cli-1.4.jar; .;
ลินุกซ์ ส่งออก CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar:.
Mac ส่งออก CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar:.

มาสร้างแอปพลิเคชันที่ใช้คอนโซลตัวอย่างซึ่งมีจุดประสงค์เพื่อรับผลรวมของตัวเลขที่ผ่านหรือการคูณของตัวเลขที่ผ่านตามตัวเลือกที่ใช้

สร้างคลาส java ชื่อ CLITester

ตัวอย่าง

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

เอาต์พุต

เรียกใช้ไฟล์ในขณะที่ส่ง -a เป็นตัวเลือกและตัวเลขเพื่อรับผลรวมของตัวเลขที่เป็นผลลัพธ์

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

เรียกใช้ไฟล์ในขณะที่ส่ง -m เป็นตัวเลือกและตัวเลขเพื่อรับการคูณของตัวเลขตามผลลัพธ์

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

อ็อบเจ็กต์ตัวเลือกใช้เพื่อแสดงตัวเลือกที่ส่งผ่านไปยังโปรแกรมบรรทัดคำสั่ง ต่อไปนี้เป็นคุณสมบัติต่างๆที่อ็อบเจ็กต์ Option มีอยู่

ซีเนียร์ No ชื่อ (ชนิด) & แอมป์; คำอธิบาย
1

opt (String)

สตริงการระบุตัวเลือก

2

longOpt (String)

นามแฝงและสตริงระบุคำอธิบายเพิ่มเติม

3

description (String)

คำอธิบายฟังก์ชันของตัวเลือก

4

required (boolean)

ตั้งค่าสถานะเพื่อตรวจสอบว่าตัวเลือกต้องปรากฏบนบรรทัดคำสั่งหรือไม่

5

arg (boolean)

ตั้งค่าสถานะเพื่อตรวจสอบว่าตัวเลือกนั้นใช้อาร์กิวเมนต์หรือไม่

6

args (boolean)

ตั้งค่าสถานะเพื่อตรวจสอบว่าตัวเลือกรับอาร์กิวเมนต์มากกว่าหนึ่งอาร์กิวเมนต์หรือไม่

7

optionalArg (boolean)

ตั้งค่าสถานะเพื่อตรวจสอบว่าอาร์กิวเมนต์ของตัวเลือกเป็นทางเลือกหรือไม่

8

argName (String)

ชื่อของค่าอาร์กิวเมนต์สำหรับคำสั่งการใช้งาน

9

valueSeparator (char)

ค่าอักขระที่ใช้ในการแยกสตริงอาร์กิวเมนต์

10

type (Object)

ประเภทอาร์กิวเมนต์

11

value (String)

ค่าตัวเลือก

12

values (String[])

ค่าของตัวเลือก

ตัวเลือกบูลีนจะแสดงบนบรรทัดคำสั่งโดยมีอยู่ ตัวอย่างเช่นหากมีตัวเลือกแสดงว่าค่าเป็นจริงมิฉะนั้นจะถือว่าเป็นเท็จ ลองพิจารณาตัวอย่างต่อไปนี้ซึ่งเรากำลังพิมพ์วันที่ปัจจุบันและแฟล็ก if -t ปรากฏอยู่ จากนั้นเราจะพิมพ์เวลาด้วย

ตัวอย่าง

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

เอาต์พุต

เรียกใช้ไฟล์โดยไม่ผ่านตัวเลือกใด ๆ และดูผลลัพธ์

java CLITester
12/11/2017

เรียกใช้ไฟล์ในขณะที่ส่ง -t เป็นตัวเลือกและดูผลลัพธ์

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

อ็อพชัน Argument จะแสดงบนบรรทัดรับคำสั่งตามชื่อและค่าที่สอดคล้องกัน ตัวอย่างเช่นหากมีตัวเลือกผู้ใช้จะต้องส่งค่า ลองพิจารณาตัวอย่างต่อไปนี้หากเรากำลังพิมพ์บันทึกไปยังไฟล์บางไฟล์ซึ่งเราต้องการให้ผู้ใช้ป้อนชื่อของไฟล์บันทึกด้วยตัวเลือกอาร์กิวเมนต์ logFile

ตัวอย่าง

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

เอาต์พุต

เรียกใช้ไฟล์ในขณะที่ส่ง --logFile เป็นตัวเลือกให้ตั้งชื่อไฟล์เป็นค่าของตัวเลือกและดูผลลัพธ์

java CLITester --logFile test.log
test.log

อ็อพชัน Properties จะแสดงบนบรรทัดรับคำสั่งตามชื่อและคุณสมบัติที่สอดคล้องกันเช่นไวยากรณ์ซึ่งคล้ายกับไฟล์คุณสมบัติ java ลองพิจารณาตัวอย่างต่อไปนี้หากเรากำลังส่งผ่านตัวเลือกเช่น -DrollNo = 1 -Dclass = VI -Dname = Mahesh เราควรประมวลผลแต่ละค่าเป็นคุณสมบัติ มาดูตรรกะการนำไปใช้งานจริง

ตัวอย่าง

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

เอาต์พุต

เรียกใช้ไฟล์ในขณะที่ส่งตัวเลือกเป็นคู่ค่าคีย์และดูผลลัพธ์

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

ตัวแยกวิเคราะห์ Posix ใช้เพื่อแยกวิเคราะห์ Posix เช่นอาร์กิวเมนต์ที่ส่งผ่าน ตอนนี้เลิกใช้แล้วและถูกแทนที่ด้วย DefaultParser

ตัวอย่าง

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

เอาต์พุต

รันไฟล์ในขณะที่ส่ง -D -A เป็นตัวเลือกและดูผลลัพธ์

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

เรียกใช้ไฟล์ขณะส่ง --D เป็นตัวเลือกและดูผลลัพธ์

java CLITester --D
D option was used.

ตัวแยกวิเคราะห์ GNU ใช้เพื่อแยกวิเคราะห์ gnu เช่นอาร์กิวเมนต์ที่ส่งผ่าน ตอนนี้เลิกใช้แล้วและถูกแทนที่ด้วย DefaultParser

ตัวอย่าง

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

เอาต์พุต

รันไฟล์ในขณะที่ส่ง -p -g -n 10 เป็นตัวเลือกและดูผลลัพธ์

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

Apache Commons CLI จัดเตรียมคลาส HelpFormatter เพื่อพิมพ์คู่มือการใช้อาร์กิวเมนต์บรรทัดคำสั่ง ดูตัวอย่างด้านล่าง -

ตัวอย่าง

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

เอาต์พุต

เรียกใช้ไฟล์และดูผลลัพธ์

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 จัดเตรียมคลาส HelpFormatter เพื่อพิมพ์วิธีใช้ที่เกี่ยวข้องกับอาร์กิวเมนต์บรรทัดคำสั่ง ดูตัวอย่าง

ตัวอย่าง

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

เอาต์พุต

เรียกใช้ไฟล์และดูผลลัพธ์

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