Как стать автором
Обновить

Комментарии 19

Спасибо за обзор, было интересно ознакомиться.
Спасибо за положительный отзыв. Если топик будет интересен, есть мысль задокументировать свои изыскания в поисках подходящей cli, который предшествовал выбору в пользу common-cli.
А почему не arg4j? Или по условиям задачи нужна была совместимость с java меньше 5-ки.
Нет, такого условия не стояло. Впервые столкнулся с проблемой действительно необходимого большого количества команд, соотвественно впервые искал cli библиотеку. Поискал, что есть на этот счет в сети (кстати на arg4j не наткнулся), выбирал по критерию простота освоения/документация/наличие примеров. common-cli оказалась лучше по этому критерию. А arg4j посмотрю.
А еще есть творение Cedric Buest'а — JCommander.
JCommander удивил своей простотой. Действительно минимум кода, функционал попробую повнимательней присмотреть.
И практически сразу обнаружил в нем поддержку нескольких команд со своими опциями. Вроде все что нужно, кроме суровой специфики разве что какой, здесь есть.
А мне jopt-simple понравился, простой и примеров много на сайте
Тоже и прост, и функционал неплох. Спасибо за ссылочку.
На всякий случай спрошу: какие аналоги есть для С/С++?
есть boost::program_options

Не знаю актуально ли еще :). Есть в boost как написал 'kzn', под nix getopt, Ну вот и мой вариант, парсит (вроде :)) все, опции, параметры, подкоманды: https://github.com/gera-gas/ApplicationHelpers/tree/master/Source/CmdLine

Передо мной недавно стояла похожая задача, и я выбрал JewelCli. Плюсы:
1) у опций может быть много аргументов (т.е., значение опции может быть списком).
2) у common-cli я не нашел способа указать список файлов в качестве аргументов (т.е., «хвост» опций, которые передаются как есть). В JewelCli это есть.
3) В JewelCli проще задавать набор опций — описывается интерфейс (с нужными свойствами), и парсер аргументов возвращает экземпляр этого интерфейса
4) JewelCli парсит аргументы, а не отдает их в виде строки
1) в common-cli может быть тоже много аргументов, к сожалению работа с ними не очень удобна. Очевидно разрабатывалось все под один аргумент, но возможность работать с несколькими аргументами есть.
2) не совсем уверен, что все правильно понял, например команда --file 1.txt 2.txt 3.txt в common-cli будет работать, о чем я написал в п.1, не очень удобно но будет. Возможно речь идет о переменном числе аргументов, например список файлов может быть и из 2 и из 3 и из 10 имен — здесь да, косяк.
3) ну вопрос «проще/сложнее» скользкий, я бы предпочел формулировку — код компактнее, лаконичнее — более измеряемые понятия. При их применении — согласен с вами.
4) Согласен.

Накидали приличное число ссылок на cli-библиотеки. Свести их ± в единую табличку в новом посте что ли?
сорри за некропост, но может кому поможет:
если переменное число аргументов то можно указать что их неограниченное кол-во:
option.setValueSeparator(';'); option.setArgs(Option.UNLIMITED_VALUES);
Вы бы хоть ссылок дали на этот common-cli. Поскольку я подозреваю, что это вовсе не common-cli, а commons-cli от Apache. Это так?
Ваша правда, упущенный s — не внимательность, а вот ссылка потерялась при переносе из песочницы публикации. Спасибо за поправку.
Спасибо, очень содержательно.
Было бы также интересно получить сравнительный анализ аналогичных библиотек (вы ведь его commons-cli не просто так выбрали).
Да, перед этим просматривал несколько библиотек. Уже возникла мысль о подобном обзоре, попробую сделать такой.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации