«1. Введение

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

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

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

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

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

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.baeldung.commandlinearguments.CliExample с нашим основным методом.

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

java com.baeldung.commandlinearguments.CliExample

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

Argument count: 0

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

java com.baeldung.commandlinearguments.CliExample Hello World!

И вывод:

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

Обычно мы публикуем наше приложение в виде jar-файла, а не в виде набора файлов .class. Допустим, мы упаковали его в cli-example.jar, а в качестве основного класса установили com.baeldung.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

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

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

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

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

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

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

3.3. IntelliJ

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

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

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

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

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

3.4. NetBeans

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

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

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

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

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

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

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

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

5. Заключение

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

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