Apache Commons CLI — Обзор
CLI Apache Commons — это компоненты Apache Commons, которые являются производными от Java API и предоставляют API для анализа аргументов / опций командной строки, передаваемых программам. Этот API также позволяет распечатать справку, связанную с доступными опциями.
Обработка командной строки состоит из трех этапов.
- Этап определения
- Этап разбора
- Этап допроса
Этап определения
На этапе определения мы определяем параметры, которые приложение может принять и действовать соответственно. CLI Commons предоставляет класс Options, который является контейнером для объектов Option.
// create Options object Options options = new Options(); // add a option options.addOption("a", false, "add two numbers");
Здесь мы добавили флаг опции a, в то время как false в качестве второго параметра означает, что опция не является обязательной, а третий параметр содержит описание опции.
Этап разбора
На этапе синтаксического анализа мы анализируем параметры, переданные с использованием аргументов командной строки после создания экземпляра анализатора.
//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 — настройка среды
Настройка локальной среды
Если вы все еще хотите настроить свою среду для языка программирования Java, то в этом разделе вы узнаете, как загрузить и настроить Java на вашем компьютере. Пожалуйста, следуйте инструкциям ниже, чтобы настроить среду.
Java SE находится в свободном доступе по ссылке Скачать Java . Таким образом, вы загружаете версию, основанную на вашей операционной системе.
Следуйте инструкциям для загрузки Java и запуска .exe для установки Java на вашем компьютере. После того, как вы установили Java на свой компьютер, вам нужно будет установить переменные окружения, чтобы они указывали на правильные каталоги установки —
Настройка пути для Windows 2000 / XP
Мы предполагаем, что вы установили Java в каталог c: \ Program Files \ java \ jdk —
-
Щелкните правой кнопкой мыши «Мой компьютер» и выберите «Свойства».
-
Нажмите кнопку «Переменные среды» на вкладке «Дополнительно».
-
Теперь измените переменную Path, чтобы она также содержала путь к исполняемому файлу Java. Например, если в настоящий момент путь задан как «C: \ WINDOWS \ SYSTEM32», измените ваш путь на «C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin».
Щелкните правой кнопкой мыши «Мой компьютер» и выберите «Свойства».
Нажмите кнопку «Переменные среды» на вкладке «Дополнительно».
Теперь измените переменную 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»
Отредактируйте файл «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, доступных на рынке. Но сейчас вы можете рассмотреть один из следующих —
-
Блокнот — на компьютере с Windows вы можете использовать любой простой текстовый редактор, например Блокнот (рекомендуется для этого урока), TextPad.
-
Netbeans — это Java IDE с открытым исходным кодом, который можно загрузить по адресу https://www.netbeans.org/index.html .
-
Eclipse — это также Java IDE, разработанная сообществом открытого исходного кода eclipse, которую можно скачать по адресу https://www.eclipse.org/ .
Блокнот — на компьютере с Windows вы можете использовать любой простой текстовый редактор, например Блокнот (рекомендуется для этого урока), TextPad.
Netbeans — это Java IDE с открытым исходным кодом, который можно загрузить по адресу https://www.netbeans.org/index.html .
Eclipse — это также Java IDE, разработанная сообществом открытого исходного кода eclipse, которую можно скачать по адресу https://www.eclipse.org/ .
Скачать Common CLI Archive
Загрузите последнюю версию jar-файла Apache Common CLI с commons-cli-1.4-bin.zip . На момент написания этого руководства мы загрузили файл commons-cli-1.4-bin.zip и скопировали его в папку C: \> Apache.
Операционные системы | Название архива |
---|---|
Windows | commons-cli-1.4-bin.zip |
Linux | Обще-кли-1,4-bin.tar.gz |
макинтош | Обще-кли-1,4-bin.tar.gz |
Установить Apache Common CLI Environment
Установите переменную окружения APACHE_HOME, чтобы она указывала на местоположение базовой директории, где на вашем компьютере хранится jar-файл Apache. Предполагая, что мы извлекли commons-collections4-4.1-bin.zip в папку Apache в различных операционных системах следующим образом.
Операционные системы | Выход |
---|---|
Windows | Установите переменную окружения APACHE_HOME в C: \ Apache |
Linux | экспорт APACHE_HOME = / usr / local / Apache |
макинтош | экспорт APACHE_HOME = / Библиотека / Apache |
Установить переменную CLASSPATH
Задайте переменную среды CLASSPATH, чтобы она указывала на расположение JAR Common CLI. Предполагается, что вы сохранили commons-cli-1.4.jar в папке Apache в различных операционных системах следующим образом.
Операционные системы | Выход |
---|---|
Windows | Установите для переменной среды CLASSPATH значение% CLASSPATH%;% APACHE_HOME% \ commons-cli-1.4.jar;.; |
Linux | export CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar :. |
макинтош | export CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar :. |
Apache Commons CLI — первое приложение
Давайте создадим пример консольного приложения, целью которого является получение либо суммы пропущенных чисел, либо умножения пропущенных чисел на основе используемых опций.
Создайте 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
Apache Commons CLI — свойства опций
Объект Option используется для представления опции, переданной в программу командной строки. Ниже приведены различные свойства, которыми обладает объект Option.
Sr.No. | Имя (Тип) и Описание |
---|---|
1 |
opt (Строка) Идентификационная строка Опциона. |
2 |
longOpt (String) Псевдоним и более описательная идентификационная строка. |
3 |
описание (строка) Описание функции опции. |
4 |
требуется (булево) Флаг, чтобы проверить, должна ли опция отображаться в командной строке. |
5 |
arg (логическое) Флаг, чтобы проверить, принимает ли опция аргумент. |
6 |
args (логическое) Флаг, чтобы проверить, принимает ли опция более одного аргумента. |
7 |
optionArg (логическое) Флаг, чтобы проверить, является ли аргумент опции необязательным. |
8 |
argName (String) Имя значения аргумента для оператора использования. |
9 |
valueSeparator (char) Символьное значение, используемое для разделения строки аргумента. |
10 |
тип (объект) Тип аргумента. |
11 |
значение (строка) Значение параметра. |
12 |
значения (String []) Значения опции. |
opt (Строка)
Идентификационная строка Опциона.
longOpt (String)
Псевдоним и более описательная идентификационная строка.
описание (строка)
Описание функции опции.
требуется (булево)
Флаг, чтобы проверить, должна ли опция отображаться в командной строке.
arg (логическое)
Флаг, чтобы проверить, принимает ли опция аргумент.
args (логическое)
Флаг, чтобы проверить, принимает ли опция более одного аргумента.
optionArg (логическое)
Флаг, чтобы проверить, является ли аргумент опции необязательным.
argName (String)
Имя значения аргумента для оператора использования.
valueSeparator (char)
Символьное значение, используемое для разделения строки аргумента.
тип (объект)
Тип аргумента.
значение (строка)
Значение параметра.
значения (String [])
Значения опции.
Apache Commons CLI — булева опция
Логическая опция представлена в командной строке своим присутствием. Например, если опция присутствует, ее значение равно true, в противном случае она считается ложной. Рассмотрим следующий пример, где мы печатаем текущую дату, и если присутствует флаг -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
Apache Commons CLI — опция аргумента
Параметр Аргумент представлен в командной строке своим именем и соответствующим значением. Например, если опция присутствует, то пользователь должен передать ее значение. Рассмотрим следующий пример: если мы печатаем журналы в некоторый файл, мы хотим, чтобы пользователь вводил имя файла журнала с параметром аргумента 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
Apache Commons CLI — опция свойств
Опция Свойства представлена в командной строке своим именем и соответствующими свойствами, такими как синтаксис, подобный файлу свойств 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
Apache Commons CLI — Парсер Posix
Парсер 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.
Apache Commons CLI — GNU Parser
Анализатор 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 — пример использования
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 — пример справки
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(); } }
Выход
Запустите файл и посмотрите результат.