Статьи

Интерфейсы командной строки Java (часть 22): argparser

Argparser Джона Ллойда — это библиотека, описанная в этом двадцать втором посте из серии, посвященной анализу аргументов командной строки на основе Java. На главной странице библиотеки есть ссылки на документацию API на основе Javadoc, файл JAR, файл ZIP и файл TAR в дополнение к одному примеру исходного кода. Пример, использованный в этом посте, аналогичен примерам, использованным в первых двадцати одном посте этой серии, и обрабатывает параметры пути / имени файла и многословия. Полный список кодов доступен на GitHub .

Этап «определения» выполняется в argparser с экземплярами классов «Holder», представляющими ожидаемые параметры, которые передаются методу addOption (String, Object) экземпляра ArgParser . Это продемонстрировано в следующем листинге кода.

Этап «Определение» с argparser

1
2
3
4
5
6
final StringHolder file = new StringHolder();
final BooleanHolder verbose = new BooleanHolder();
 
final ArgParser parser = new ArgParser("java examples.dustin.commandline.argparser.Main");
parser.addOption ("-f,--file %s #Path and name of file", file);
parser.addOption ("-v,--verbose %v #Verbosity enabled?", verbose);

Многие из библиотек, рассматриваемых в этой серии при разборе аргументов командной строки из Java, имеют характеристики опций, явно прописанные с отдельными параметрами, отдельными методами или отдельными элементами аннотаций. Как показано в листинге кода, вместо этого argparser имеет атрибуты опции, изложенные в строке «спецификации», которую argparser анализирует.

Этап «синтаксического анализа» выполняется в argparser путем передачи String[] с аргументами командной строки в метод matchAllArgs (String []) класса ArgParser . Это единственное утверждение показано в следующем листинге кода.

Этап «Парсинга» с argparser

1
parser.matchAllArgs(arguments);

Этап «опрос» выполняется в argparser путем доступа к public полю « value » в соответствующих классах «Holder». Это показано в следующем листинге кода.

Этап «Допрос» с argparser

1
2
out.println("File path/name is: " + file.value);
out.println("Verbosity is: " + verbose.value);

Библиотека argparser также поддерживает сообщение «help» / «using». Это продемонстрировано в следующем листинге кода, в котором записано использование, если не указана опция «file» (если ее «value» равно null ).

«Использование» с argparser

1
2
3
4
5
if (file.value == null)
{
   out.println("ERROR: File path/name was not specified! Use -f or --file to specify file path/name.\n"
      + parser.getHelpMessage());
}

Снимки экрана, показанные ниже, демонстрируют примеры, описанные в этом посте. На первом изображении показано «использование», предоставляемое argparser, когда не указана необходимая опция «file». Второе изображение показывает использование длинных и коротких имен опций.

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

  • Arparser с открытым исходным кодом. Мне не ясно, лицензировано ли это по какой-либо конкретной лицензии, но есть файл COPYRIGHT включенный в JAR, который гласит: «Copyright John E. Lloyd, 2004. Все права защищены. Разрешение на использование, копирование, изменение и повторное распространение предоставляется при условии, что это уведомление об авторском праве сохраняется и автор получает кредит в случае необходимости ». Существует также стандартный отказ от ответственности за программное обеспечение, распространяемое «как есть».
  • Размер файла argparser.jar составляет приблизительно 129 КБ, но включает файлы исходного кода .java , скомпилированные файлы .class и файлы HTML Javadoc.
  • Javadoc для класса argparser.ArgParser превосходен и является примером того, что я хотел бы регулярно видеть в Javadoc для «основных» классов библиотек на основе Java. Это хороший пример того, как небольшой проект с открытым исходным кодом может документировать проект / библиотеку один раз, потому что Javadoc класса также используется и ссылается на главную страницу проекта . Этот Javadoc уровня класса даже включает исходный код SimpleExample (который также находится в распределенном файле JAR) для примера того, как использовать класс и библиотеку.
  • Поскольку argparser скомпилирован с « основной версией: 46 », он должен работать с версией Java такой же старой, как JDK 1.2 !

Библиотека argparser небольшая и простая в использовании. Это, вероятно, больше всего понравится тем, кто хочет, чтобы небольшая библиотека выполняла базовую обработку командной строки, и особенно понравится всем, кто все еще может использовать свой код обработки командной строки на основе Java в старых версиях JDK. Пара вещей, которые отличают эту библиотеку от многих других, рассматриваемых в этой серии, — это превосходная документация API на основе Javadoc и подход к спецификации строк для характеристик опций.

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

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

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