1. Обзор
Как правило, каждое значимое приложение включает в себя один или несколько файлов JAR в качестве зависимостей. Но бывают случаи, когда сам файл JAR представляет собой отдельное приложение или веб-приложение.
Здесь мы сосредоточимся на сценарии автономного приложения. С этого момента мы будем называть его JAR-приложением.
В этом руководстве мы сначала узнаем, как создать приложение JAR. Позже мы узнаем, как запускать приложение JAR с аргументами командной строки или без них.
2. Создайте JAR - приложение
Файл JAR может содержать один или несколько основных классов. Каждый основной класс является точкой входа приложения. Таким образом, файл JAR теоретически может содержать более одного приложения, но для запуска он должен содержать хотя бы один основной класс.
Файл JAR может иметь одну точку входа, установленную в его файле манифеста . В этом случае JAR-файл является исполняемым JAR -файлом . Основной класс должен быть включен в этот файл JAR.
Во-первых, давайте посмотрим на быстрый пример того, как скомпилировать наши классы и создать исполняемый JAR с файлом манифеста:
$ javac com/foreach/jarArguments/*.java
$ jar cfm JarExample.jar ../resources/example_manifest.txt com/foreach/jarArguments/*.class
Неисполняемый JAR — это просто файл JAR, для которого не определен основной класс
в файле манифеста. Как мы увидим позже, мы по-прежнему можем запускать основной класс, содержащийся в самом JAR-файле.
Вот как мы создадим неисполняемый JAR без файла манифеста:
$ jar cf JarExample2.jar com/foreach/jarArguments/*.class
3. Аргументы командной строки Java
Как и любое приложение, приложение JAR принимает любое количество аргументов, включая нулевые аргументы. Все зависит от потребности приложения.
Это позволяет пользователю указать информацию о конфигурации при запуске приложения.
В результате приложение может избежать жестко закодированных значений и по-прежнему может обрабатывать множество различных вариантов использования.
Аргумент может содержать любые буквенно-цифровые символы, символы Юникода и, возможно, некоторые специальные символы, разрешенные оболочкой, например, @.
Аргументы разделяются одним или несколькими пробелами. Если аргумент должен содержать пробелы, пробелы должны быть заключены в кавычки. Либо одинарные, либо двойные кавычки работают нормально.
Обычно для типичного Java-приложения при вызове приложения пользователь вводит аргументы командной строки после имени класса.
Однако это не всегда так для приложений JAR.
Как мы уже говорили, точкой входа основного класса Java является метод main . Все аргументы представляют собой String
и передаются основному методу в виде массива String .
При этом внутри приложения мы можем преобразовать любой элемент массива String
в другие типы данных, такие как char
, int
, double
, их классы-оболочки или другие подходящие типы.
4. Запустите исполняемый файл JAR с аргументами
Давайте посмотрим на основной синтаксис для запуска исполняемого файла JAR с аргументами:
java -jar имя-файла-jar [аргументы …]
Созданный ранее исполняемый файл JAR представляет собой простое приложение, которое просто распечатывает переданные аргументы. Мы можем запустить его с любым количеством аргументов.
Вот пример с двумя аргументами:
$ java -jar JarExample.jar "arg 1" arg2@
Мы увидим этот вывод в консоли:
Hello ForEach Reader in JarExample!
There are 2 argument(s)!
Argument(1):arg 1
Argument(2):arg2@
Таким образом, при вызове исполняемого файла JAR нам не нужно указывать имя основного класса в командной строке. Мы просто добавляем наши аргументы после имени файла JAR. Если мы указываем имя класса после имени исполняемого файла JAR, оно просто становится первым аргументом фактического основного класса.
В большинстве случаев приложение JAR является исполняемым файлом JAR. Исполняемый файл JAR может иметь максимум один основной класс, определенный в файле манифеста .
Следовательно, другие приложения в том же самом исполняемом файле JAR не могут быть установлены в файле манифеста, но мы все еще можем запускать их из командной строки, как если бы мы делали это для неисполняемого файла JAR. Мы увидим, как именно в следующем разделе.
5. Запустите неисполняемый JAR с аргументами
Чтобы запустить приложение в неисполняемом файле JAR, мы должны использовать опцию -cp
вместо -jar
.
Мы будем использовать параметр -cp
(сокращение от пути к классам), чтобы указать файл JAR, содержащий файл класса, который мы хотим выполнить:
java -cp jar-file-name имя-основного-класса [аргументы …]
Как мы видим, в этом случае нам нужно будет указать имя основного класса в командной строке, за которым следуют аргументы.
Неисполняемый JAR, созданный ранее, содержит такое же простое приложение. Мы можем запускать его с любыми (включая нулевые) аргументами.
Вот пример с двумя аргументами:
$ java -cp JarExample2.jar com.foreach.jarArguments.JarExample "arg 1" arg2@
И, как мы видели выше, мы увидим этот вывод:
Hello ForEach Reader in JarExample!
There are 2 argument(s)!
Argument(1):arg 1
Argument(2):arg2@
6. Заключение
В этой статье мы узнали о двух способах запуска приложения JAR в командной строке с аргументами или без них.
Мы также продемонстрировали, что аргумент может содержать пробелы и специальные символы (если это разрешено оболочкой).
Как всегда, код примеров доступен на GitHub .