Разбор аргументов командной строки — обычная задача, давайте посмотрим, как мы можем использовать 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
Хороший!