В этой четвертой части моей серии, посвященной синтаксическому анализу командной строки в Java, представлена командная строка , которая описывается как «библиотека Java для анализа аргументов командной строки», которая «основана на отображении аргументов командной строки на объекты с использованием аннотаций».
Как и ранее рассмотренные args4j и jbock , Commandline использует аннотации для «определения» потенциальных параметров командной строки. Однако, хотя args4j делает это с помощью аннотаций на полях класса, а jbock делает это с помощью аннотаций на конструкторе и его параметрах, Commandline использует аннотации на методах «set» (мутатор). В этом посте я использую пример класса Main как и в предыдущих постах, посвященных обработке командной строки на основе Java, но в обычных ситуациях я бы предпочел иметь специальный класс, представляющий аргументы командной строки.
Следующий листинг кода демонстрирует использование аннотаций командной строки в методах «get» для реализации этапа «определения» обработки командной строки в командной строке.
Этап командной строки «Определение» Обработка командной строки
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
public class Main{ /** Is verbosity enabled? */ private boolean verbose; /** Name/path of applicable file. */ private String fileName; @Option @ShortSwitch("v") @LongSwitch("verbose") @Toggle(true) public void setVerbose(final boolean newVerbose) { verbose = newVerbose; } @Option @ShortSwitch("f") @LongSwitch("file") @SingleArgument @Required public void setFileName(final String newFileName) { fileName = newFileName; } |
В приведенном выше листинге кода показано использование аннотации @Option строки @Option наряду с другими аннотациями, которые настраивают заданную опцию ( @ShortSwitch и @LongSwitch для коротких и длинных аргументов, @Required для обязательных аргументов, @SingleArgument для указания одного аргумента, связанного с switch, и @Toggle чтобы указать, что наличие или отсутствие переключателя является тем, что является значительным [без аргумента, связанного с этим переключателем]).
В следующем листинге кода демонстрируются этапы «синтаксического анализа» и «опроса» синтаксического анализа командной строки с помощью командной строки.
«Разбор» и «Опрос» с помощью командной строки
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
try{ // "Parsing" stage. final Main main = CommandLineParser.parse( Main.class, arguments, OptionStyle.LONG_OR_COMPACT); // "Interrogation" stage. out.println("You provided file name of '" + main.fileName + "' and verbose is set to '" + main.verbose + "'.");}catch (IllegalAccessException | InstantiationException | InvocationTargetException exception){ out.println("ERROR: Unable to parse command-line arguments: " + exception);} |
Последний пример кода демонстрирует, что синтаксический анализ выполняется с помощью единственного CommandLineParser.parse(Class<T>, String[], OptionStyle) а опрос так же прост, как и доступ к членам экземпляра, возвращенного этим методом. Третий аргумент, предоставленный методу parse важен, потому что он инструктирует синтаксический анализатор, как ожидать появления переключателей.
В только что показанном примере кода используется OptionStyle.LONG_OR_COMPACT , который описывается в документации: «Длинные переключатели начинаются с двух тире. Короткие переключатели начинаются с одной черты и могут быть объединены в один ». Напротив, OptionStyle.SIMPLE инструктирует синтаксический анализатор ожидать, что «все переключатели должны быть автономными» и «все (как длинные, так и короткие) должны начинаться с одной черты в командной строке».
Следующий снимок экрана демонстрирует это простое приложение в действии.
Если обязательный аргумент не указан, отображается сообщение (включая трассировку стека), подобное показанному на следующем снимке экрана.
Я не привожу здесь пример использования справки или использования на основе командной строки, потому что, как говорится на странице проекта GitHub , «создание текста справки» — это «функциональность, которая в настоящее время не поддерживается».
Вот некоторые дополнительные характеристики командной строки, которые следует учитывать при выборе библиотеки, чтобы помочь с анализом командной строки в Java.
- Командная строка имеет открытый исходный код и лицензируется в соответствии с Apache License Version 2.0 .
- Текущая версия командной строки ( 1.7.0 ) требует как минимум Java SE 7 .
- Размер
commandline-1.7.0.jarсоставляет приблизительно 38 КБ и не зависит от каких-либо дополнительных библиотек.
Командная строка — это еще одна из множества библиотек обработки командной строки с открытым исходным кодом, доступных для разработчиков Java, и, как и некоторые другие, использует аннотации для выполнения большей части тяжелой работы.
Дополнительные ссылки
| Ссылка: | Интерфейсы командной строки Java (часть 4): Командная строка от нашего партнера по JCG Дастина Маркса из блога Inspired by Actual Events . |

