Apache Commons CLI

Даже в 2019 году мы иногда пишем консольные утилиты. Эти консольные программы не имеют графического интерфейса, но принимают различные параметры и ключи с командной строки. Разбирать эти параметры командной строки вручную довольно муторная работа. К счастью, у нас есть Apache Commons CLI, который позволяет облегчить процесс разбора различных флагов и параметров, передаваемых в наше приложение.

Давайте начнём. Для начала нужно подключить Apache Commons CLI в наш проект. В maven нужно добавить следующую зависимость:

Теперь можно начать обработку параметров командной строки. Начнём с вот такой заготовки:

Нам передаётся массив args, но мы не будем разбирать его вручную. Мы задействуем мощь Apache Commons CLI. Для начала нам нужно создать объект Options:

В созданный экземпляр класса Options мы будем добавлять описания ключей и параметров. Добавлять можно с помощью фабричных методов, либо создавая экземпляры Option вручную:

В примере выше мы добавили ключ -v, при обработке которого мы будем выводить больше информации в консоль.

Кроме указания коротких ключей мы можем заодно добавить длинный вариант, который будет указываться после двух знаков минус, например, в следующем параметре можно будет указать -s или --secondOption:

Обратите внимание на третий параметр метода addOption в примере выше. Если его выставить в true, то будет предполагаться передача параметра в программу после этого ключа:

Все предыдущие ключи/параметры были необязательными. Добавим теперь один обязательный параметр с помощью метода addRequiredOption:

Ок. Поскольку мы уже описали наши параметры, то теперь нам нужно распарсить массив args, переданный в метод main:

После выполнения метода parse у CommandLineParser мы получим экземпляр объекта CommandLine, с помощью которого мы можем проверить, какие опции были выставлены. Сейчас же обратите внимание на обработку ParseException. Мы просто выводим стектрейс в консоль. В идеале нам бы нужно здесь вывести подсказку, как на самом деле нужно вводить параметры. Для этого используется HelpFormatter:

Попробуйте теперь скомпилировать и запустить приложение как Debug Java Application, для чего в дереве файлов проекта просто кликните правой кнопкой мышки и выберите Debug As -> Java Application.. В консоли должно вывестись:

Наш HelpFormatter отлично отработал. Теперь давайте добавим обработку ключей, для чего используется метод hasOption, проверяющий, передана ли нам опция с указанным ключом:

Теперь в конфигурации запуска нашего Debug Java Application укажите Program Arguments:

Пример для Eclipse:

Program arguments

Запустите полученную конфигурацию и в консоли увидите:

Как видим, наша обработка опций сработала.

Добавим в наш “pom.xml” конфигурацию, которая будет собирать jar-файл, который можно запускать с консоли (не берите сильно в голову, это не относится к текущей статье:

Теперь соберём jar файл с помощью:

и с собранным файлом проверим работоспособность опций:

Ура! Всё работает. Подписывайтесь, делайте донаты на Яндекс.Кошелек. Всем Бобра.

Ссылки по статье:

Исходные коды на GitHub

Файлы по статье:


Поделиться:

Добавить комментарий

Ваш e-mail не будет опубликован.