Статьи

Интерфейсы командной строки Java (часть 17): jw-options

Статья на JavaWorld Обработка аргументов командной строки в Java: Дело, закрытое доктором Матиасом Лауксом, представляет простую библиотеку на основе Java для обработки аргументов командной строки , на которую в этом посте я буду ссылаться как на jw-options . Ссылочная статья содержит справочную информацию о том, почему определенные конструктивные решения были приняты при построении класса Options . «Заключение» статьи описывает преимущество использования сопровождающего класса и библиотеки: «В этой статье описывается класс Java, который обеспечивает удобную обработку параметров командной строки для программ Java. Структура достаточно гибкая, чтобы обрабатывать даже сложные ситуации, и в то же время предлагает API, который позволяет определять приемлемый синтаксис командной строки с ограниченными усилиями при кодировании ».

«Библиотека», представленная в этой статье о JavaWorld, состоит из трех классов Java: Options , OptionData и OptionSet . Это демонстрируется на следующем снимке экрана, который отображает содержимое файла options.jar .

Этап «определения» с помощью «jw-options» достигается с OptionSet классов Options и OptionSet . Это продемонстрировано в следующем листинге кода (полный листинг кода доступен на GitHub, и пример здесь похож на те, что использовались в предыдущих постах этой серии)

Этап «Определение» с опциями jw

1
2
3
4
final Options options = new Options(arguments, Multiplicity.ZERO_OR_ONE);
final OptionSet defaultOptions = options.getSet();
defaultOptions.addOption("f", false, Separator.BLANK, Multiplicity.ONCE);
defaultOptions.addOption("v", Multiplicity.ZERO_OR_ONE);

Только что показанный листинг кода демонстрирует использование нескольких перегруженных методов addOption . Для настройки параметра пути к файлу и имени ( -f ) вызывается версия с четырьмя аргументами, состоящая из одной буквы флага («f»), разделителя между флагом и его аргументом (пробел), и сколько раз флаг должен ожидаться (ровно одно вхождение). Второй аргумент для многословия («-v») устанавливается путем вызова версии addOption с двумя аргументами, которая указывает символ флага («v») и его число ожидаемых вхождений (ноль или одно вхождение).

Стадия «синтаксического анализа» достигается в «jw-options» путем вызова метода check Options . Этот метод также может быть использован, как следует из его названия, для проверки точности аргументов. Это продемонстрировано в следующем листинге кода.

Этап «Разбор» с опциями jw

1
2
3
4
5
if (!options.check(false, false))
{
   out.println("ERROR: " + options.getCheckErrors());
   System.exit(-1);
}

В только что показанном примере «синтаксического анализа» метод getCheckErrors() класса getCheckErrors() был использован для доступа к ошибкам в проанализированных параметрах, которые привели к тому, Options.check метод Options.check возвратил false .

Этап «допрос» с «jw-options» демонстрируется в следующем листинге кода.

Этап «Допрос» с опциями jw

1
2
out.println("File path/name is " + defaultOptions.getOption("f").getResultValue(0));
out.println("Verbosity is set to " + defaultOptions.isSet("v"));

Пример «опроса» демонстрирует использование OptionSet getOption для доступа к опции, представляющей опцию «-f», а затем вызывает его getResultValue(0) для доступа к первому (и только в этом случае) значению, связанному с этим «-f» Флаг. Вторая строка в этом примере просто запрашивает, был ли указан флаг -v или нет (и не беспокоится или не ожидает, что значение будет связано с этим флагом) с помощью метода isSet .

Снимок экрана показан рядом, чтобы продемонстрировать код, показанный до сих пор, который использует «jw-options». На рисунке показаны сообщения, сообщаемые, когда ожидаемые аргументы командной строки не предоставлены, и два примера с использованием флагов командной строки, как и предполагалось.

Есть характеристики «jw-options», которые следует учитывать при выборе платформы или библиотеки, чтобы помочь с анализом командной строки в Java.

  • «Библиотека» «jw-options» является открытым исходным кодом в том смысле, что ее исходный код подробно представлен и обсужден в статье JavaWorld « Обработка аргументов командной строки в Java: дело закрыто, а исходный код включен в JAR, доступный для загрузки». как ZIP-файл jw-0816-command.zip . » Однако лицензия на эту «библиотеку» не очевидна.
  • Библиотека «jw-options» небольшая: размер файла options.jar составляет около 13 КБ.
  • Насколько я могу судить, невозможно указать «длинные» имена флагов с двойными дефисами с «jw-options».
  • Команда javap, запускаемая на классах в jar- файле «jw-options», показывает « major version: 49 », что означает, что она скомпилирована с J2SE 5 и должна работать с приложениями, работающими на Java, такими же старыми, как J2SE 5 (я заметил использование StringBuffer в код, в котором StringBuilder работал бы так же хорошо).

«Библиотека» «jw-options», обсуждаемая в этом посте, скорее всего заинтересует тех, кому нужно использовать библиотеку обработки командной строки с более старой версией Java или кто заинтересован в ней в академическом смысле. Поскольку эта «библиотека» подробно описана в соответствующей статье JavaWorld и поскольку она является открытым исходным кодом, можно просмотреть код и просмотреть статью, чтобы увидеть, как она выполняет синтаксический анализ командной строки и почему она использует этот подход. Учитывая, что лицензия на «jw-options» неочевидна, и учитывая, что это относительно «старая» библиотека, которая, похоже, не получает обновлений, вполне вероятно, что большинство разработчиков Java предпочтут некоторые альтернативные библиотеки, описанные в этом документе. во многих случаях серии «jw-options».

Дополнительные ссылки

Опубликовано на Java Code Geeks с разрешения Дастина Маркса, партнера нашей программы JCG . См. Оригинальную статью здесь: Интерфейсы командной строки Java (часть 17): jw-options

Мнения, высказанные участниками Java Code Geeks, являются их собственными.