В первой статье этой серии, посвященной анализу аргументов командной строки в 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 является открытым исходным кодом и распространяется по лицензии GNU General Public License версии 3 .
- Некоторым , особенно корпорациям, кажется, неудобно с лицензией GPLv3.
- Apache Commons CLI и SLF4J (две зависимости времени выполнения) имеют собственные лицензии: Лицензия Apache, Версия 2 для CLI Apache Commons и эквивалент лицензии MIT для SLF4J .
- MarkUtils-CLI доступен в виде отдельного JAR- файла , но концептуально является частью большего MarkUtils, доступного на https://java.ziesemer.com/
- JAR com.ziesemer.utils.cli-2017.05.28.jar является относительно небольшим (приблизительно 26 КБ), но имеет зависимости времени выполнения от внешних библиотек Apache Commons CLI (ожидается, потому что MarkUtils-CLI обертывает эту библиотеку) и SLF4J (потому что SLF4J является широко используемая библиотека, эта зависимость не может быть большой проблемой для многих).
- Для MarkUtils-CLI требуется Java SE 6 .
- Автор MarkUtils-CLI уведомил меня о существовании этой библиотеки и, похоже, активно участвует в ее поддержке, чего нельзя сказать о всех библиотеках, описанных в этой серии . Он заявил, что «обязуется реагировать и исправлять все, что может встретиться», с помощью отслеживания проблем MarkUtils-CLI GitHub . Он также отметил, что существует 95 выполняющихся модульных тестов, проверяющих функциональность MarkUtils-CLI.
MarkUtils-CLI — это небольшая оболочка для Apache Commons CLI, которая модернизирует работу с Apache Commons CLI посредством использования аннотаций и обработки типов параметров командной строки. MarkUtils-CLI, скорее всего, понравится тем, кто уже использует Apache Commons CLI и хочет воспользоваться преимуществами более простого определения параметров с помощью аннотаций и более безопасного анализа параметров. Преимущества этой библиотеки включают текущую поддержку и тщательное модульное тестирование библиотеки. Проблемы, которые могут помешать некоторым из использования этой библиотеки, — это ее лицензия GPL и ее внешняя зависимость от SLF4J (при условии, что зависимость Apache Commons CLI не является проблемой, поскольку она объявляется как оболочка для Apache Commons CLI).
Дополнительные ссылки
- MarkUtils-CLI: аннотации (и более) для Apache Commons CLI (Основная запись блога)
- Скачать MarkUtils-CLI
- Документация API MarkUtils-CLI (Javadoc)
- Проблемы с MarkUtils
- https://java.ziesemer.com/ (различные проекты Java, включая MarkUtils-CLI )
- Отчет MarkUtils-CLI SureFire (95 модульных тестов)
- MarkUtils Сообщения в блоге
Опубликовано на Java Code Geeks с разрешения Дастина Маркса, партнера нашей программы JCG . См. Оригинальную статью здесь: Интерфейсы командной строки Java (часть 24): MarkUtils-CLI
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |