Статьи

Интерфейсы командной строки Java (часть 24): MarkUtils-CLI

В первой статье этой серии, посвященной анализу аргументов командной строки в Java, была представлена ​​библиотека CLI Apache Commons . Это одна из старейших и, вероятно, одна из наиболее часто используемых библиотек синтаксического анализа командной строки на основе Java, описанных в этой серии . Apache Commons CLI действительно показывает его возраст, особенно если сравнивать с некоторыми из более современных библиотек обработки командной строки на основе Java. MarkUtils -CLI Марка А. Циземера « Оболочка библиотеки CLI для Apache Commons CLI» был разработан для «модернизации» Apache Commons CLI и является темой этого сообщения в блоге.

В своем блоге « MarkUtils-CLI: аннотации (и более) для Apache Commons CLI » Зиземер пишет:


Я чувствую, что проект CLI Apache Commons продает себя коротко. Я обнаружил, что это очень всеобъемлющая, хорошо спроектированная библиотека для эффективного анализа командной строки. Единственный недостаток, который я заметил, это то, что проект был разработан до того, как Java 5 — и аннотации — были доступны. Таким образом, библиотека не предлагает поддержку каких-либо функций, которые могут предложить аннотации.

Представляем последнее дополнение к MarkUtils: MarkUtils-CLI — это библиотека, которая обеспечивает эффективный мост между CLI Apache Commons и аннотациями Java — без замены устаревшей библиотеки Commons CLI.

В этом посте используются примеры, аналогичные тем, которые использовались в предыдущих статьях этой серии (параметры командной строки «file» и «verbose»), чтобы проиллюстрировать, как MarkUtils-CLI оборачивает CLI Apache Commons и позволяет определять параметры посредством аннотаций и предоставляет типизированные параметры. В этом посте CliRunner MarkUtils-CLI используется для его удобства. Полный список исходного кода для этих примеров доступен на GitHub .

На этапе «определения» с MarkUtils-CLI применяются аннотации @Parameter , как показано в следующем листинге кода.

Этап «Определение» с MarkUtils-CLI

1
2
3
4
5
@Parameter(name="f", longName="file", description="Path/name of file", required=true)
public String file;
 
@Parameter(name="v", longName="verbose", description="Verbosity enabled or not", argCount=0)
public boolean verbose;

В этом листинге кода показано, как «короткое» имя опции (один дефис / один символ ») и « длинное »имя опции (двойной дефис / слово) могут быть заданы как отдельные элементы аннотации @Parameter . Элемент « description » может использоваться в «справке», созданной MarkUtils-CLI, а элемент « required » аннотации позволяет указать обязательную опцию. Указание argCount в качестве нуля для «verbose» также указывает синтаксическому анализатору, что для опции «verbose» не ожидается никаких аргументов.

Этап «синтаксического анализа» может быть выполнен в MarkUtils-CLI через CliRunner и экземпляр командной строки Apache Commons CLI CommandLineParser . Это продемонстрировано в следующем листинге кода, где экземпляр DefaultParser CLI Apache Commons передается конструктору CliRunner вместе с экземпляром класса, поля которого @Parameter аннотацией @Parameter .

Этап «Парсинга» с MarkUtils-CLI

1
2
final DefaultParser cmdLineParser = new DefaultParser();
final CliRunner<Main> cliRunner = new CliRunner(cmdLineParser, Main.class);

При использовании подхода CliRunner от MarkUtils-CLI CliRunner «опроса» выполняется в методе call () вызываемого объекта, который передается CliRunner «run» в CliRunner . Реализация метода «call ()» показана в следующем листинге кода, а код, который передает принадлежащий Callable CliRunner «run» CliRunner доступен в полном листинге исходного кода на GitHub .

Этап «Допрос» с MarkUtils-CLI

1
2
3
4
5
6
@Override
public Integer call() throws Exception
{
   out.println("File path/name is '" + file + "' and verbosity is " + verbose);
   return file != null ? 0 : -1;
}

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

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

MarkUtils-CLI — это небольшая оболочка для Apache Commons CLI, которая модернизирует работу с Apache Commons CLI посредством использования аннотаций и обработки типов параметров командной строки. MarkUtils-CLI, скорее всего, понравится тем, кто уже использует Apache Commons CLI и хочет воспользоваться преимуществами более простого определения параметров с помощью аннотаций и более безопасного анализа параметров. Преимущества этой библиотеки включают текущую поддержку и тщательное модульное тестирование библиотеки. Проблемы, которые могут помешать некоторым из использования этой библиотеки, — это ее лицензия GPL и ее внешняя зависимость от SLF4J (при условии, что зависимость Apache Commons CLI не является проблемой, поскольку она объявляется как оболочка для Apache Commons CLI).

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

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

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