Перейти к основному содержимому

Аргументы командной строки в Java

· 5 мин. чтения

1. Введение

Довольно часто приложения запускаются из командной строки с использованием аргументов. Особенно на стороне сервера. Обычно мы не хотим, чтобы приложение делало одно и то же при каждом запуске: мы хотим каким-то образом настроить его поведение.

В этом кратком руководстве мы рассмотрим, как мы можем обрабатывать аргументы командной строки в Java.

2. Доступ к аргументам командной строки в Java

Поскольку метод main является точкой входа приложения Java, JVM передает аргументы командной строки через свои аргументы.

Традиционным способом является использование массива строк :

public static void main(String[] args) {
// handle arguments
}

Однако в Java 5 появились varargs, которые представляют собой массивы в овечьей шкуре. Следовательно, мы можем определить наш main с помощью String vararg:

public static void main(String... args) {
// handle arguments
}

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

Параметр метода основного метода содержит аргументы командной строки в том же порядке, в котором мы передавали их при выполнении. Если мы хотим получить доступ к тому, сколько аргументов мы получили, нам нужно только проверить длину массива.

Например, мы можем вывести количество аргументов и их значение на стандартный вывод:

public static void main(String[] args) {
System.out.println("Argument count: " + args.length);
for (int i = 0; i < args.length; i++) {
System.out.println("Argument " + i + ": " + args[i]);
}
}

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

3. Как передавать аргументы командной строки

Теперь, когда у нас есть приложение, которое обрабатывает аргументы командной строки, нам не терпится попробовать его. Давайте посмотрим, какие у нас есть варианты.

3.1. Командная строка

Самый очевидный способ — командная строка. Предположим, мы уже скомпилировали класс com.foreach.commandlinearguments.CliExample с нашим основным методом.

Затем мы можем запустить его с помощью следующей команды:

java com.foreach.commandlinearguments.CliExample

Он производит следующий вывод:

Argument count: 0

Теперь мы можем передавать аргументы после имени класса:

java com.foreach.commandlinearguments.CliExample Hello World!

И вывод:

Argument count: 2
Argument 0: Hello
Argument 1: World!

Обычно мы публикуем наше приложение в виде jar-файла, а не в виде набора файлов .class . Допустим, мы упаковали его в cli-example.jar , а в качестве основного класса установили com.foreach.commandlinearguments.CliExample .

Теперь мы можем запустить его без аргументов следующим образом:

java -jar cli-example.jar

Или с аргументами:

java -jar cli-example.jar Hello World!
Argument count: 2
Argument 0: Hello
Argument 1: World!

Обратите внимание, что Java будет рассматривать каждый аргумент, который мы передаем после имени класса или имени файла jar, как аргументы нашего приложения . Поэтому все, что мы передаем перед этим, является аргументом для самой JVM.

3.2. Затмение

Пока мы работаем над нашим приложением, мы хотим проверить, работает ли оно так, как мы хотим.

В Eclipse мы можем запускать приложения с помощью конфигураций запуска. Например, конфигурация запуска определяет, какую JVM использовать, какова точка входа, путь к классам и т. д. И, конечно же, мы можем указать аргументы командной строки.

Самый простой способ создать подходящую конфигурацию запуска — щелкнуть правой кнопкой мыши наш основной метод, а затем выбрать « Запуск от имени» > «Приложение Java» в контекстном меню:

./90143624ce6b3695ba6542c7bb1a74b1.png

При этом мы мгновенно запускаем наше приложение с настройками, которые соответствуют настройкам нашего проекта.

Чтобы предоставить аргументы, мы должны затем отредактировать эту конфигурацию запуска. Мы можем сделать это через пункт меню « Выполнить»> «Выполнить конфигурации… ». Здесь мы должны перейти на вкладку « Аргументы » и заполнить текстовое поле « Аргументы программы» :

./070a13c8ab17cdf2108fa01f0b3f52e0.png

Нажатие « Выполнить » запустит приложение и передаст только что введенные аргументы.

3.3. IntelliJ

IntelliJ использует аналогичный процесс для запуска приложений. Он называет эти параметры просто конфигурациями.

Во-первых, нам нужно щелкнуть правой кнопкой мыши по основному методу, а затем выбрать «Выполнить CliExample.main()»:

./eface4f607f183ec394fd040130e2a6a.png

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

Итак, затем, чтобы настроить аргументы, мы должны выбрать « Выполнить»> «Редактировать конфигурации… » и отредактировать текстовое поле « Аргументы программы» :

./529e4d439d6791887d2dec94d0056fa1.png

После этого мы должны нажать OK и перезапустить наше приложение, например, с помощью кнопки запуска на панели инструментов.

3.4. NetBeans

NetBeans также соответствует своим рабочим процессам и процессам настройки.

Сначала мы должны запустить наше приложение, щелкнув правой кнопкой мыши основной метод и выбрав « Выполнить файл»:

./278b3b0820c7917bf64713fc1ea31d14.png

Как и раньше, это создает конфигурацию запуска и запускает программу.

Затем мы должны настроить аргументы в этой конфигурации запуска. Мы можем сделать это, выбрав « Выполнить»> «Установить конфигурацию проекта»> «Настроить»… Затем мы должны « Выполнить » слева и заполнить текстовое поле « Аргументы »:

./cafa9c3b189012c9356581ac002c557a.png

После этого мы должны нажать OK и запустить приложение.

4. Сторонние библиотеки

Ручная обработка аргументов командной строки проста в простых сценариях. Однако по мере того, как наши требования становятся все более и более сложными, усложняется и наш код. Поэтому, если мы хотим создать приложение с несколькими параметрами командной строки, было бы проще использовать стороннюю библиотеку.

К счастью, существует множество таких библиотек, которые поддерживают большинство вариантов использования. Двумя популярными примерами являются Picocli и Spring Shell .

5. Вывод

Всегда полезно сделать поведение вашего приложения настраиваемым. В этой статье мы увидели, как это сделать с помощью аргументов командной строки. Кроме того, мы рассмотрели различные способы передачи этих аргументов.

Как обычно, примеры доступны на GitHub .