Запустите приложение Java из командной строки

1. Обзор

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

В этой статье мы сосредоточимся на сценарии автономного приложения. В дальнейшем мы будем называть его приложением JAR.

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

2. Создайте приложение JAR.

Файл JAR может содержать один или несколько основных классов. Каждый основной класс - это точка входа в приложение . Итак, теоретически файл JAR может содержать более одного приложения, но он должен содержать хотя бы один основной класс, чтобы иметь возможность работать.

Файл JAR может иметь одну точку входа, установленную в файле манифеста . В этом случае файл JAR является исполняемым файлом JAR. В этот JAR-файл должен быть включен основной класс.

Прежде всего, давайте посмотрим на быстрый пример того, как скомпилировать наши классы и создать исполняемый JAR с файлом манифеста:

$ javac com/baeldung/jarArguments/*.java $ jar cfm JarExample.jar ../resources/example_manifest.txt com/baeldung/jarArguments/*.class

Неисполняемый JAR - это просто JAR-файл, для которого в файле манифеста не определен главный класс . Как мы увидим позже, мы все еще можем запускать основной класс, который содержится в самом файле JAR.

Вот как мы могли бы создать неисполняемый JAR без файла манифеста:

$ jar cf JarExample2.jar com/baeldung/jarArguments/*.class

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

Как и любое приложение, приложение JAR принимает любое количество аргументов, включая ноль аргументов. Все зависит от потребности приложения.

Это позволяет пользователю указать информацию о конфигурации при запуске приложения .

В результате приложение может избежать жестко запрограммированных значений и по-прежнему может обрабатывать множество различных вариантов использования.

Аргумент может содержать любые буквенно-цифровые символы, символы Юникода и, возможно, некоторые специальные символы, разрешенные оболочкой, например, '@'.

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

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

Однако для приложений JAR это не всегда так.

Как мы уже обсуждали, точкой входа в основной класс Java является метод main. Эти аргументы являются все строки s и передаются в основной метод в качестве струнного массива.

При этом внутри приложения мы можем преобразовать любой элемент массива String в другие типы данных, такие как char , int , double , их классы-оболочки или другие подходящие типы.

4. Запустите исполняемый файл JAR с аргументами.

Давайте посмотрим на основной синтаксис для запуска исполняемого файла JAR с аргументами:

java -jar имя-jar-файла [аргументы…]

Созданный ранее исполняемый файл JAR представляет собой простое приложение, которое просто распечатывает переданные аргументы. Мы можем запустить его с любым количеством аргументов. Ниже приведен пример с двумя аргументами:

$ java -jar JarExample.jar "arg 1" [email protected] 

Мы увидим в консоли следующий вывод:

Hello Baeldung Reader in JarExample! There are 2 argument(s)! Argument(1):arg 1 Argument(2):[email protected] 

Таким образом, при вызове исполняемого JAR-файла нам не нужно указывать имя основного класса в командной строке . Мы просто добавляем наши аргументы после имени файла JAR. Если мы предоставим имя класса после имени исполняемого файла JAR, оно просто станет первым аргументом фактического основного класса.

В большинстве случаев приложение JAR представляет собой исполняемый файл JAR. Исполняемый JAR может иметь максимум один основной класс, определенный в файле манифеста.

Следовательно, другие приложения в том же исполняемом файле JAR не могут быть установлены в файле манифеста, но мы по-прежнему можем запускать их из командной строки, как и для неисполняемого JAR. Мы увидим, как именно, в следующем разделе.

5. Запустите неисполняемый JAR с аргументами.

Для того, чтобы запустить приложение в не-исполняемый файл JAR, мы должны использовать -cp вариант вместо -jar . Мы будем использовать параметр -cp (сокращение от classpath), чтобы указать файл JAR, содержащий файл класса, который мы хотим выполнить:

java -cp имя-файла-jar имя-основного-класса [аргументы…]

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

Неисполняемый JAR, созданный ранее, содержит такое же простое приложение. Мы можем запустить его с любыми (в том числе нулевыми) аргументами. Вот пример с двумя аргументами:

$ java -cp JarExample2.jar com.baeldung.jarArguments.JarExample "arg 1" [email protected]

И, как мы видели выше, мы увидим следующий результат:

Hello Baeldung Reader in JarExample! There are 2 argument(s)! Argument(1):arg 1 Argument(2):[email protected]

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

В этом руководстве мы узнали два способа запуска приложения JAR в командной строке с аргументами или без них.

Мы также продемонстрировали, что аргумент может содержать пробелы и специальные символы (если это разрешено оболочкой).

Как всегда, код примеров доступен на GitHub.