Разбор аргументов командной строки — обычная задача, давайте посмотрим, как мы можем использовать JCommander, чтобы сделать это красиво и аккуратно.

Наивный разбор командной строки

Давайте посмотрим на типичный основной метод Java:

Я использую maven, поэтому мой файл POM:

Мой pom включает плагин сборки maven со ссылкой на общедоступный статический основной метод, это создаст автономный файл jar со всеми зависимостями, которые я могу запустить с помощью среды выполнения Java.

Теперь давайте установим его с помощью mvn clean install

И запустите файл jar java -jar target\demo-1.0-SNAPSHOT-jar-with-dependencies.jar

Hello World!

Прохладный.

Теперь давайте сломаем это

посмотрите на подпись основного метода:

public static void main(String[] args)

Он получает список строк, это место для передачи аргументов командной строки.

Давайте возьмем аргументы и напечатаем его:

Давайте установим снова:

mvn clean install

И запустить с одним аргументом java -jar target\demo-1.0-SNAPSHOT-jar-with-dependencies.jar argument1

Hello World!
The value of arg1 is: argument1

Работы не достаточно

С одним аргументом командной строки это кажется простым, но когда у вас много разных аргументов разных типов, это становится громоздким.

Есть лучший способ!

Представляем jcommander

Jcommander — это Java-библиотека для аргументов командной строки.

Он анализирует и проверяет аргументы, переданные программе, в объект, который делает использование аргументов чистым и аккуратным.

Шаг 1 — включить в pom.xml

Глядя на свойства репозитория JCommander maven, мы можем взять последнюю версию:

<!-- https://mvnrepository.com/artifact/com.beust/jcommander -->
<dependency>
    <groupId>com.beust</groupId>
    <artifactId>jcommander</artifactId>
    <version>1.82</version>
</dependency>

Шаг 2 — создайте класс для объекта arguments:

Обратите внимание, что все параметры снабжены аннотацией parameter из пакета jcommander.

Шаг 3 — используйте синтаксический анализатор jcommanders для анализа args в Args class.

Установить:

mvn clean install

Запустите с вводом -help:

java -jar target\demo-1.0-SNAPSHOT-jar-with-dependencies.jar -help

Usage: <main class> [options]
  Options:
    -debug
      Debug mode
      Default: false
    -help
-name
      name of instance
    -log, -verbose
      Level of verbosity
      Default: 1

Теперь давайте запустим с реальными входными данными:

java -jar target\demo-1.0-SNAPSHOT-jar-with-dependencies.jar -name Eldad -verbose 2 -debug

Выход:

Hello World!
The value of name is: Eldad
The value of verbose is: 2
The value of debug is: true

Хороший!