Apache Commons CLI - Hướng dẫn nhanh

Apache Commons CLI là các thành phần của Apache Commons có nguồn gốc từ Java API và cung cấp một API để phân tích cú pháp các đối số / tùy chọn dòng lệnh được chuyển đến các chương trình. API này cũng cho phép in trợ giúp liên quan đến các tùy chọn có sẵn.

Xử lý dòng lệnh bao gồm ba giai đoạn. Các giai đoạn này được giải thích dưới đây:

  • Giai đoạn định nghĩa
  • Giai đoạn phân tích cú pháp
  • Giai đoạn thẩm vấn

Giai đoạn định nghĩa

Trong giai đoạn định nghĩa, chúng tôi xác định các tùy chọn mà ứng dụng có thể thực hiện và hoạt động tương ứng. Commons CLI cung cấp lớp Options, là vùng chứa các đối tượng Option.

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

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

Ở đây chúng tôi đã thêm một cờ tùy chọn a, trong khi false là tham số thứ hai, biểu thị rằng tùy chọn không bắt buộc và tham số thứ ba nêu mô tả của tùy chọn.

Giai đoạn phân tích cú pháp

Trong giai đoạn phân tích cú pháp, chúng tôi phân tích cú pháp các tùy chọn được truyền bằng cách sử dụng các đối số dòng lệnh sau khi tạo một phiên bản phân tích cú pháp.

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

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

Giai đoạn thẩm vấn

Trong giai đoạn Thẩm vấn, chúng tôi kiểm tra xem một tùy chọn cụ thể có xuất hiện hay không và sau đó, xử lý lệnh cho phù hợp.

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

Trong chương này, chúng ta sẽ tìm hiểu về thiết lập môi trường cục bộ của Apache Commons CLI và cách thiết lập đường dẫn của Commons CLI cho Windows 2000 / XP, Windows 95/98 / ME, v.v. Chúng ta cũng sẽ hiểu về một số trình soạn thảo java phổ biến và cách tải xuống kho lưu trữ Commons CLI.

Thiết lập môi trường cục bộ

Nếu bạn vẫn sẵn sàng thiết lập môi trường của mình cho ngôn ngữ lập trình Java, thì chương này sẽ hướng dẫn bạn cách tải xuống và thiết lập Java trên máy của bạn. Vui lòng làm theo các bước được đề cập bên dưới để thiết lập môi trường.

Java SE có sẵn miễn phí từ liên kết https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html. Vì vậy, bạn có thể tải xuống phiên bản dựa trên hệ điều hành của mình.

Làm theo hướng dẫn để tải xuống Java và chạy .exe để cài đặt Java trên máy của bạn. Khi bạn đã cài đặt Java trên máy của mình, bạn sẽ cần đặt các biến môi trường để trỏ đến các thư mục cài đặt chính xác.

Đường dẫn cho Windows 2000 / XP

Chúng tôi giả định rằng bạn đã cài đặt Java trong c:\Program Files\java\jdk danh mục.

  • Nhấp chuột phải vào 'My Computer' và chọn 'Properties'.

  • Bấm vào 'Environment variables' nút dưới 'Advanced' chuyển hướng.

  • Bây giờ, hãy thay đổi 'Path'biến, để nó cũng chứa đường dẫn đến tệp thực thi Java. Ví dụ, nếu đường dẫn hiện được đặt thành'C:\WINDOWS\SYSTEM32', sau đó thay đổi đường dẫn của bạn để đọc 'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'.

Đường dẫn cho Windows 95/98 / ME

Chúng tôi giả định rằng bạn đã cài đặt Java trong c:\Program Files\java\jdk danh mục.

  • Chỉnh sửa 'C:\autoexec.bat' tập tin và thêm dòng sau vào cuối - 'SET PATH=%PATH%;C:\Program Files\java\jdk\bin'.

Đường dẫn cho Linux, UNIX, Solaris, FreeBSD

Biến môi trường PATH phải được đặt thành điểm, nơi các tệp nhị phân Java đã được cài đặt. Tham khảo tài liệu shell của bạn, nếu bạn gặp khó khăn khi thực hiện việc này.

Ví dụ: nếu bạn sử dụng bash làm trình bao, thì bạn sẽ thêm dòng sau vào cuối '.bashrc: export PATH = / path / to / java: $ PATH'

Trình chỉnh sửa Java phổ biến

Để viết các chương trình Java, bạn cần một trình soạn thảo văn bản. Có rất nhiều IDE tinh vi có sẵn trên thị trường. Nhưng hiện tại, bạn có thể xem xét một trong những điều sau:

  • Notepad - Trên máy Windows, bạn có thể sử dụng bất kỳ trình soạn thảo văn bản đơn giản nào như Notepad (Khuyến nghị cho hướng dẫn này), TextPad.

  • Netbeans- Đây là một IDE Java mã nguồn mở và miễn phí, có thể tải xuống từ www.netbeans.org/index.html .

  • Eclipse- Nó cũng là một IDE Java được phát triển bởi cộng đồng nguồn mở eclipse và có thể tải xuống từ www.eclipse.org .

Tải xuống kho lưu trữ CLI chung

Tải xuống phiên bản mới nhất của tệp jar Apache Common CLI từ commons-cli-1.4-bin.zip . Tại thời điểm viết hướng dẫn này, chúng tôi đã tải xuống commons-cli-1.4-bin.zip và sao chép nó vào thư mục C: \> Apache.

Hệ điều hành Tên lưu trữ
các cửa sổ commons-cli-1.4-bin.zip
Linux commons-cli-1.4-bin.tar.gz
Mac commons-cli-1.4-bin.tar.gz

Môi trường CLI chung của Apache

Đặt APACHE_HOMEbiến môi trường để trỏ đến vị trí thư mục cơ sở nơi lưu trữ jar Apache trên máy của bạn. Giả sử rằng chúng tôi đã giải nén commonscollections4-4.1-bin.zip trong thư mục Apache trên các Hệ điều hành khác nhau như sau:

Hệ điều hành Đầu ra
các cửa sổ Đặt biến môi trường APACHE_HOME thành C: \ Apache
Linux xuất APACHE_HOME = / usr / local / Apache
Mac xuất APACHE_HOME = / Library / Apache

Biến CLASSPATH

Đặt CLASSPATHbiến môi trường để trỏ đến vị trí jar CLI chung. Giả sử rằng bạn đã lưu trữ commons-cli-1.4.jar trong thư mục Apache trên các Hệ điều hành khác nhau như sau:

Hệ điều hành Đầu ra
các cửa sổ Lưu trữ chương trình AIML </ Đặt biến môi trường CLASSPATH thành% CLASSPATH%;% APACHE_HOME% \ commons-cli-1.4.jar;.;
Linux xuất CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar:.
Mac xuất CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar:.

Hãy tạo một ứng dụng dựa trên bảng điều khiển mẫu, có mục đích là lấy tổng các số đã chuyển hoặc phép nhân các số đã chuyển dựa trên các tùy chọn được sử dụng.

Tạo một lớp java có tên CLITester.

Thí dụ

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

Đầu ra

Chạy tệp, trong khi chuyển -a dưới dạng tùy chọn và các số để nhận tổng các số.

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

Chạy tệp, trong khi chuyển -m dưới dạng tùy chọn và các số để nhận kết quả là phép nhân các số.

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

Đối tượng Option được sử dụng để đại diện cho Option được truyền vào chương trình dòng lệnh. Sau đây là các thuộc tính khác nhau mà một đối tượng Option có.

Sr.No Tên (Loại) & amps; Sự miêu tả
1

opt (String)

Chuỗi nhận dạng của Quyền chọn.

2

longOpt (String)

Bí danh và chuỗi nhận dạng mô tả khác.

3

description (String)

Mô tả chức năng của tùy chọn.

4

required (boolean)

Gắn cờ để kiểm tra xem tùy chọn có phải xuất hiện trên dòng lệnh hay không.

5

arg (boolean)

Gắn cờ để kiểm tra xem tùy chọn có tham số hay không.

6

args (boolean)

Gắn cờ để kiểm tra xem tùy chọn có nhiều đối số hay không.

7

optionalArg (boolean)

Gắn cờ để kiểm tra xem đối số của tùy chọn có phải là tùy chọn hay không.

số 8

argName (String)

Tên của giá trị đối số cho câu lệnh sử dụng.

9

valueSeparator (char)

Giá trị ký tự dùng để chia chuỗi đối số.

10

type (Object)

Kiểu đối số.

11

value (String)

Giá trị tùy chọn.

12

values (String[])

Giá trị của tùy chọn.

Một tùy chọn boolean được biểu diễn trên một dòng lệnh bởi sự hiện diện của nó. Ví dụ, nếu có tùy chọn thì giá trị của nó là true, ngược lại, nó được coi là false. Hãy xem xét ví dụ sau, nơi chúng ta đang in ngày hiện tại và nếu -t có cờ. Sau đó, chúng tôi cũng sẽ in thời gian.

Thí dụ

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

Đầu ra

Chạy tệp mà không chuyển bất kỳ tùy chọn nào và xem kết quả.

java CLITester
12/11/2017

Chạy tệp, trong khi chuyển -t dưới dạng tùy chọn và xem kết quả.

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

Tùy chọn Đối số được biểu diễn trên một dòng lệnh bằng tên và giá trị tương ứng của nó. Ví dụ: nếu có tùy chọn, thì người dùng phải chuyển giá trị của nó. Hãy xem xét ví dụ sau, nếu chúng ta đang in nhật ký cho một số tệp, chúng tôi muốn người dùng nhập tên của tệp nhật ký với tùy chọn đối số logFile.

Thí dụ

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

Đầu ra

Chạy tệp, trong khi truyền --logFile dưới dạng tùy chọn, tên của tệp dưới dạng giá trị của tùy chọn và xem kết quả.

java CLITester --logFile test.log
test.log

Tùy chọn Thuộc tính được biểu diễn trên một dòng lệnh bằng tên của nó và các thuộc tính tương ứng của nó như cú pháp, tương tự như tệp thuộc tính java. Hãy xem xét ví dụ sau, nếu chúng ta đang truyền các tùy chọn như -DrollNo = 1 -Dclass = VI -Dname = Mahesh, chúng ta nên xử lý từng giá trị dưới dạng thuộc tính. Hãy xem logic triển khai trong hành động.

Thí dụ

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

Đầu ra

Chạy tệp, trong khi chuyển các tùy chọn dưới dạng các cặp giá trị khóa và xem kết quả.

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

Trình phân tích cú pháp Posix được sử dụng để phân tích cú pháp Posix giống như các đối số được truyền vào. Nó hiện không được dùng nữa và được thay thế bằng DefaultParser.

Thí dụ

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

Đầu ra

Chạy tệp trong khi chuyển -D -A làm tùy chọn và xem kết quả.

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

Chạy tệp trong khi chuyển --D as option và xem kết quả.

java CLITester --D
D option was used.

Trình phân tích cú pháp GNU được sử dụng để phân tích cú pháp gnu giống như các đối số được truyền vào. Nó hiện không được dùng nữa và được thay thế bằng DefaultParser.

Thí dụ

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

Đầu ra

Chạy tệp trong khi chuyển -p -g -n 10 làm tùy chọn và xem kết quả.

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

Apache Commons CLI cung cấp lớp HelpFormatter để in hướng dẫn sử dụng các đối số dòng lệnh. Hãy xem ví dụ dưới đây -

Thí dụ

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

Đầu ra

Chạy tệp và xem kết quả.

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 cung cấp lớp HelpFormatter để in trợ giúp liên quan đến các đối số dòng lệnh. Xem ví dụ.

Thí dụ

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

Đầu ra

Chạy tệp và xem kết quả.

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