Библиотека обработки аргументов командной строки на основе Java, описанная в этом посте, была избранной библиотекой статьи IBM developerWorks « Динамика программирования Java», часть 3, «Прикладное отражение» (эта статья 2003 года была «заархивирована» в 2016 году, но все еще доступна для скачивания в формате PDF ) , Библиотека, называемая JArgp (библиотека обработки аргументов командной строки Java), определена на ее главной веб-странице как «библиотека для обработки аргументов командной строки в Java». На этой странице добавлено: «В отличие от большинства других библиотек этого типа, JArgp использует отражение для хранения фактических значений непосредственно в полях целевого объекта приложения». JArgp 1.0 показан в этом посте.
JArgp — это минималистичная библиотека, о чем свидетельствует небольшое количество классов в JARgp JAR.
Этап «определения» выполняется в JArgp через спецификацию массива экземпляров ParameterDef . Пользовательские классы могут быть написаны для расширения класса ParameterDef
, но я смогу использовать два предоставленных расширения этого класса ( StringDef и BoolDef ) для реализации аргументов пути / имени файла и многословия, реализованных в предыдущих статьях этой серии. Это показано в следующем листинге (полный код будет доступен на GitHub ).
Этап «Определение» с JArgp
1
2
3
4
5
|
private static final ParameterDef[] PARAMETERS_DEFINITIONS = { new StringDef( 'f' , "file" , "File path and name" ), new BoolDef( 'v' , "verbose" , "Verbosity level" ) }; |
Начальным аргументом для конструкторов расширяющих классы ParameterDef
StringDef и BoolDef
является единственный символ, который будет флагом командной строки. В этом случае, определенные флаги аргумента командной строки будут «-f» для пути к файлу / имени и «-v» для многословия. Второй аргумент каждого конструктора — это имя поля класса, в которое будут записываться любые значения, связанные с флагами командной строки. Третий аргумент каждого конструктора — это описание флага аргумента командной строки. Насколько я могу судить, нет способа указать «длинные» имена аргументов (в этом случае нет возможности указать --file
или --verbose
).
Этап «синтаксического анализа» выполняется в JArgp с помощью вызова статического метода ArgumentProcessor processArgs (String [], ParameterDef [], Object) . Это иллюстрируется в следующем листинге кода.
«Разбор» в JArgp
1
2
3
4
5
6
|
final Main instance = new Main(); // The integer returned by the next invocation is actually the // zero-based index of next argument to be processed final int numberArgumentsProcessed = ArgumentProcessor.processArgs( arguments, PARAMETERS_DEFINITIONS, instance); |
Этап «опрос» с помощью JArgp реализуется путем доступа к полям в экземпляре, имена которых совпадают с именами, указанными в определениях параметров. Это показано в следующем листинге кода.
Этап «Допрос» в JArgp
1
2
3
|
out.println( "File path/name is " + instance.file + " and verbosity is " + instance.verbose); |
Использование приведенного кода продемонстрировано на следующем снимке экрана.
Если бы я хотел применить описания, которые я предоставил, к флагам командной строки при их определении, я мог бы использовать подход метода экземпляра для анализа, а не подход статической функции, показанный ранее. Это продемонстрировано в следующем листинге кода.
1
2
3
4
5
|
final Main instance = new Main(); final ArgumentProcessor argumentProcessor = new ArgumentProcessor(PARAMETERS_DEFINITIONS); argumentProcessor.processArgs(arguments, instance); argumentProcessor.listParameters( 50 , out); |
Последняя строка в предыдущем листинге кода демонстрирует, как метод ArgumentProcessor.listParameters (int, PrintStream) можно использовать для записи флагов и их описаний для вывода. Этот вывод демонстрируется на следующем снимке экрана.
Есть особенности Jargp, которые следует учитывать при выборе платформы или библиотеки, которые помогут при разборе командной строки в Java.
- JArgp имеет открытый исходный код, а его лицензию можно посмотреть на главной странице проекта ( Sosnoski Software Associates ).
- Размер файла jargp.jar составляет всего около 10 КБ.
- Библиотека JArgp, описанная в этом посте, отличается от другой библиотеки, также называемой JArgP — анализатор аргументов командной строки Java (JArg от Sosnoski Software Associates и JArg P от Munkei Software ).
JArgp — это минималистичная библиотека для обработки аргументов командной строки в Java. Он не поддерживает «длинные» имена аргументов по умолчанию и не поддерживает столько функций, сколько некоторые другие библиотеки, описанные в этой серии, но он небольшой и простой в использовании. В первую очередь я включил его в эту серию из-за того, что он связан с статьей IBM DeveloperWorks .
Дополнительные ресурсы
- Страница проекта JArgp
- Скачать JArgp (SourceForge)
- Документация по JArgp API (Javadoc)
- Динамика программирования Java, часть 3, Прикладная рефлексия : Создание основы для аргументов командной строки
Опубликовано на Java Code Geeks с разрешения Дастина Маркса, партнера нашей программы JCG . См. Оригинальную статью здесь: Интерфейсы командной строки Java (часть 16): JArgp
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |