Статьи

Интерфейсы командной строки Java (часть 21): авиакомпания 2

В этом двадцать первом посте этой серии, посвященном анализу аргументов командной строки в Java, рассматривается библиотека Airline 2 . На странице проекта GitHub для Airline 2 описывается библиотека: «Airline — это библиотека Java, предоставляющая основанную на аннотациях среду для анализа интерфейсов командной строки». Страница переходит в состояние, в котором «Авиакомпания« поддерживает обе простые одиночные команды вплоть до сложных интерфейсов в стиле git с группами ». На этой странице также определяются отношения Airline 2 с оригинальной библиотекой Airline : «Это существенно переписанный оригинал библиотеки авиакомпании ». Именно Авиакомпания 2.3.0, которая показана в этом посте.

Примеры в этом посте будут аналогичны тем, которые демонстрировались в предыдущих статьях этого цикла об альтернативных библиотеках для анализа аргументов командной строки из Java. Таким образом, параметры, поддерживаемые в этих примерах, будут указывать путь и имя файла, а также спецификацию того, следует ли включать многословие. Полный список кодов для примеров, показанных здесь, доступен на GitHub.

Этап «определения» парсинга аргументов командной строки из Java с помощью Airline 2 легко выполняется с помощью аннотаций @Option, как показано в следующем листинге кода.

Этап «Определение» с авиакомпанией 2

1
2
3
4
5
@Option(title="file", name={"-f", "--file"}, description="Path and name of file.")
private String file;
 
@Option(title="verbose", name={"-v", "--verbose"}, description="Enable or disable verbosity.")
private boolean verbose;

Код для этих экземпляров аннотаций @Option достаточно @Option . Элемент « name » аннотации @Option ожидает одну или несколько String и, таким образом, позволяет указывать несколько флагов для одной и той же опции. В этом случае я использовал одинаковые «короткие» формы с одним дефисом / одним символом и «длинные» формы с двумя дефисами / словом для опций.

Этап «синтаксического анализа» может быть выполнен с помощью Airline 2 с использованием класса SingleCommand и его статического метода singleCommand (Class <C>) для получения экземпляра SingleCommand и последующего вызова метода parse (String []) для этого экземпляра. Эти два утверждения продемонстрированы в следующем листинге кода.

Этап «Разбор» с авиакомпанией 2

1
2
final SingleCommand<Main> parser = SingleCommand.singleCommand(Main.class);
final Main main = parser.parse(arguments);

Этап «допроса» в Airline 2 выполняется простым доступом к @Option @Option полям экземпляра, предоставленного методом SingleCommand.parse(String[]) . Это продемонстрировано в следующем листинге кода.

Этап «Допрос» с авиакомпанией 2

1
2
3
4
5
6
7
8
9
if (main.file != null)
{
   out.println("File path/name is '" + main.file + "'.");
   out.println("Verbosity is " + main.verbose);
}
else
{
   out.println("ERROR: File path/name must be provided with -f or --file.");
}

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

Авиакомпания поставляется с поддержкой для создания использования и справочной информации. К сожалению, мне не удалось заставить его работать на меня, потому что я столкнулся с ошибкой компиляции, которая гласила: «файл класса для com.github.rvesse.airline.io.printers.UsagePrinter not found». Я не вижу этот класс в airline-2.3.0.jar я скачал.

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

  • Авиакомпания 2 имеет открытый исходный код и лицензируется под лицензией Apache, версия 2.0 .
  • «Авиакомпания 2» — это одна из «более весомых» библиотек, описанных в этой серии, в которой авиакомпания авиакомпания-2.3.0 имеет размер приблизительно 316 КБ и имеет зависимости во время выполнения от коллекций Apache Commons , Apache Commons Lang и javax.inject / javax.inject. ,
  • Хотя Airline существует уже некоторое время, Airline 2 — это совсем недавно обновленная версия этого проекта.
  • Документация по основному использованию Airline 2 проста и полезна, но документация по многим функциям, не показанным в этом посте, все еще находится в стадии разработки с многочисленными заявлениями «TODO».

Airline 2 прост в использовании для обработки аргументов в стиле «одной команды», реализованной в моих примерах в этих постах. Я не видел какого-либо метода для выражения того, требуется ли опция, но простая проверка на наличие null для требуемой опции перед продолжением является простым подходом для этого. Учитывая свой размер и зависимости, Airline 2, вероятно, лучше всего подходит для тех, кто хочет использовать многие из своих мощных функций, не продемонстрированных в этом посте. Для простых примеров, продемонстрированных в этом и других постах этой серии, существуют более легкие библиотеки с меньшим количеством зависимостей, которые очень похожи на Airline 2 с точки зрения выражения этапов «определение», «анализ» и «опрос».

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

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

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