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»
в контекстном меню:
При этом мы мгновенно запускаем наше приложение с настройками, которые соответствуют настройкам нашего проекта.
Чтобы предоставить аргументы, мы должны затем отредактировать эту конфигурацию запуска. Мы можем сделать это через пункт меню « Выполнить»> «Выполнить конфигурации…
». Здесь мы должны перейти на вкладку « Аргументы
» и заполнить текстовое поле « Аргументы программы» :
Нажатие « Выполнить
» запустит приложение и передаст только что введенные аргументы.
3.3. IntelliJ
IntelliJ использует аналогичный процесс для запуска приложений. Он называет эти параметры просто конфигурациями.
Во-первых, нам нужно щелкнуть правой кнопкой мыши по основному
методу, а затем выбрать «Выполнить CliExample.main()»:
Это запустит
нашу программу, но также добавит ее в список выполнения для дальнейшей настройки.
Итак, затем, чтобы настроить аргументы, мы должны выбрать « Выполнить»> «Редактировать конфигурации…
» и отредактировать текстовое поле « Аргументы программы» :
После этого мы должны нажать OK и перезапустить наше приложение, например, с помощью кнопки запуска на панели инструментов.
3.4. NetBeans
NetBeans также соответствует своим рабочим процессам и процессам настройки.
Сначала мы должны запустить наше приложение, щелкнув правой кнопкой мыши основной
метод и выбрав « Выполнить файл»:
Как и раньше, это создает конфигурацию запуска и запускает программу.
Затем мы должны настроить аргументы в этой конфигурации запуска. Мы можем сделать это, выбрав « Выполнить»> «Установить конфигурацию проекта»> «Настроить»…
Затем мы должны « Выполнить
» слева и заполнить текстовое поле « Аргументы »:
После этого мы должны нажать OK и запустить приложение.
4. Сторонние библиотеки
Ручная обработка аргументов командной строки проста в простых сценариях. Однако по мере того, как наши требования становятся все более и более сложными, усложняется и наш код. Поэтому, если мы хотим создать приложение с несколькими параметрами командной строки, было бы проще использовать стороннюю библиотеку.
К счастью, существует множество таких библиотек, которые поддерживают большинство вариантов использования. Двумя популярными примерами являются Picocli и Spring Shell .
5. Вывод
Всегда полезно сделать поведение вашего приложения настраиваемым. В этой статье мы увидели, как это сделать с помощью аргументов командной строки. Кроме того, мы рассмотрели различные способы передачи этих аргументов.
Как обычно, примеры доступны на GitHub .