Статьи

Интерфейсы командной строки Java (часть 14): google-options

На странице GitHub для google-options говорится, что google-options — это «библиотека для анализа аргументов командной строки, созданная людьми из Google (java)». Страница продолжает: «Это анализатор аргументов командной строки из Bazel Project . Пакет com.google.devtools.common.options был разделен на отдельный jar для общего пользования ». Этот пост демонстрирует применение google-options для обработки параметров командной строки из кода Java.

Пример, используемый в этом посте для демонстрации параметров google , аналогичен примерам, использованным в предыдущих тринадцати статьях этой серии, посвященных обработке параметров командной строки в Java. В этом примере поддерживаются два параметра: обязательный параметр пути / имени файла, ожидающий аргумент String с этим путем и именем, и параметр многословия без аргумента (его существование допускает многословие). В этом посте будут показаны только самые важные части кода, но полный код доступен на GitHub .

Этап «определения» обработки командной строки на основе Java выполняется в google-options с помощью пользовательского класса, который расширяет класс google-options com.google.devtools.common.options.OptionsBase . Пользовательский класс должен предоставлять public поля, которые соответствуют ожидаемым параметрам командной строки, и каждое из этих public полей должно быть отмечено аннотацией @Option . Аннотация @Option требует двух элементов ( name и defaultValue ) и допускает наличие необязательных элементов, таких как help и abbrev . Пример этого этапа «определения» приведен в следующем листинге кода для пользовательского класса Options .

Этап «Определение» с google-options: класс пользовательских настроек

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
/**
 * Represents command-line options to be processed via
 * google-options library. Fields must be annotated with
 * @Option and must be public.
 */
public class Options extends OptionsBase
{
   @Option(name="file",
           abbrev='f',
           help="Path and name of file",
           category="Startup",
           defaultValue="")
   public String filePathAndName;
 
   @Option(name="verbose",
           abbrev='v',
           help="Enable verbose output",
           category="Startup",
           defaultValue="false")
   public boolean verbose;
}

Обязательный элемент «name» в аннотации @Option указывает имя опции «long», а необязательный элемент « @Option определяет имя опции «short» (один символ). Необязательный элемент « @Option аннотации @Option позволяет предоставить строку «help» для параметра, а обязательный элемент «defaultValue» указывает значение по умолчанию для параметра, который будет использоваться, если параметр не указан явно.

Этап «синтаксического анализа» выполняется в google-options путем создания экземпляра экземпляра OptionsParser, связанного с пользовательским классом, с помощью public полей, помеченных Option и последующего вызова метода «parse» для этого экземпляра OptionsParser . Следующий листинг кода демонстрирует это с помощью вызова метода OptionsParser.parseAndExitUponError (String []) .

Этап «Разбор» с опциями google

1
2
final OptionsParser optionsParser = OptionsParser.newOptionsParser(Options.class);
optionsParser.parseAndExitUponError(arguments);

Стадия «опрос» с опциями google так же проста, как и доступ к public полям, помеченным Option в пользовательском классе, как показано в следующем листинге кода.

Этап «Допрос» с google-options

1
2
3
out.println(
     "Path/file name is '" + options.filePathAndName
   + "' and verbosity is '" + options.verbose + "'.");

Следующий листинг кода демонстрирует, как метод OptionsParser можно использовать для отображения справочной информации.

Использование «Справки» google-options

1
2
3
4
5
6
private static void printUsage(OptionsParser parser)
{
   out.println("Usage: java Main <Options>");
   out.println(parser.describeOptions(Collections.emptyMap(),
   OptionsParser.HelpVerbosity.LONG));
}

На следующих снимках экрана показаны перечисленные выше коды. Первое изображение отображает информацию «справки», предоставляемую, когда аргументы не предоставляются, а второе изображение отображает два основных параметра командной строки, выраженные в различных длинных и коротких формах. Одно интересное наблюдение, которое можно сделать из этого второго изображения, заключается в том, что google-options автоматически поддерживает параметр --noversion для boolean параметра, явно не указывающего многословия.

Снимки экрана также демонстрируют, что google-options зависит от Guava .

Вот характеристики google-параметров, которые следует учитывать при выборе каркаса или библиотеки, которые помогут при разборе командной строки в Java.

  • google-options — это библиотека с открытым исходным кодом, лицензированная по лицензии Apache 2.0 .
  • Размер google-options-1.0.0.jar составляет около 72 КБ.
  • Приложения, использующие google-options, также должны включать Guava в путь к классам среды выполнения, поскольку google-options зависит от Guava. В любом случае, для приложений, использующих Guava, это не имеет большого значения. Однако для небольших приложений, которые еще не используют Guava, это может быть скорее зависимостью, чем хотелось бы авторам приложений для простого приложения на основе командной строки.

Несколько библиотек обработки командной строки на основе Java, описанных в этой серии, используют аннотации для определения ожидаемых параметров, и этот подход используется google-options. Базовая обработка параметров командной строки с помощью google-options является относительно простым процессом, но стоимость новой зависимости от Guava может быть слишком высокой для простых приложений, которые еще не зависят от Guava.

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