1. Обзор
Обычно удобно объединять множество файлов классов Java в один архивный файл.
В этом уроке мы рассмотрим все тонкости работы с jar – или J ava AR chive – файлами на Java.
В частности, мы возьмем простое приложение и рассмотрим различные способы его упаковки и запуска в виде jar. Мы также ответим на некоторые любопытные вопросы, такие как как легко прочитать файл манифеста jar по пути.
2. Настройка программы Java
Прежде чем мы сможем создать запускаемый jar-файл, наше приложение должно иметь класс с основным методом . Этот класс обеспечивает нашу точку входа в приложение:
public static void main(String[] args) { System.out.println("Hello Baeldung Reader!"); }
3. Команда Jar
Теперь, когда мы все настроили, давайте скомпилируем наш код и создадим наш jar-файл.
Мы можем сделать это с помощью javac из командной строки:
javac com/baeldung/jar/*.java
Команда javac создает JarExample.class в каталоге com/baeldung/jar . Теперь мы можем упаковать это в файл jar.
3.1. Использование параметров по умолчанию
Чтобы создать файл jar, мы будем использовать кувшин команда.
Чтобы использовать команду jar для создания файла jar, нам нужно использовать опцию c , чтобы указать, что мы создаем файл, и опцию f , чтобы указать файл:
jar cf JarExample.jar com/baeldung/jar/*.class
3.2. Установка основного класса
Полезно, чтобы манифест файла jar включал основной класс.
Манифест-это специальный файл в банке, расположенный в каталоге META-INF и названный MANIFEST.MF . Файл манифеста содержит специальную метаинформацию о файлах в файле jar.
Некоторые примеры того, для чего мы можем использовать файл манифеста, включают установку точки входа, установку информации о версии и настройку пути к классу.
Используя опцию e , мы можем указать нашу точку входа, и команда jar добавит ее в сгенерированный файл манифеста.
Давайте запустим jar с указанной точкой входа:
jar cfe JarExample.jar com.baeldung.jar.JarExample com/baeldung/jar/*.class
3.3. Обновление содержания
Допустим, мы внесли изменения в один из наших классов и перекомпилировали его. Теперь нам нужно обновить наш jar-файл.
Давайте используем команду jar с параметром u для обновления ее содержимого:
jar uf JarExample.jar com/baeldung/jar/JarExample.class
3.4. Настройка файла манифеста
В некоторых случаях нам может потребоваться больше контроля над тем, что входит в наш файл манифеста. Команда jar предоставляет функциональные возможности для предоставления нашей собственной информации о манифесте.
Давайте добавим частичный файл манифеста с именем example_manifest.txt чтобы ваше приложение установило нашу точку входа:
Main-Class: com.baeldung.jar.JarExample
Информация о манифесте, которую мы предоставляем, будет добавлена к тому, что генерирует команда jar, так что это единственная строка, которая нам нужна в файле.
Важно, чтобы мы заканчивали наш файл манифеста символом |/newline . Без новой строки наш файл манифеста будет молча проигнорирован.
С этой настройкой давайте снова создадим нашу банку, используя нашу информацию о манифесте и опцию m :
jar cfm JarExample.jar com/baeldung/jar/example_manifest.txt com/baeldung/jar/*.class
3.5. Подробный Вывод
Если нам нужна дополнительная информация из команды jar , мы можем просто добавить опцию v для verbose.
Давайте запустим нашу команду jar с параметром v :
jar cvfm JarExample.jar com/baeldung/jar/example_manifest.txt com/baeldung/jar/*.class added manifest adding: com/baeldung/jar/JarExample.class(in = 453) (out= 312)(deflated 31%)
4. Использование Maven
4.1. Конфигурация по Умолчанию
Мы также можем использовать Maven для создания нашей банки. Поскольку Maven предпочитает условность конфигурации, мы можем просто запустить пакет для создания нашего jar-файла.
mvn package
По умолчанию наш jar-файл будет добавлен в папку target в нашем проекте.
4.2. Указание основного класса
Мы также можем настроить Maven для указания основного класса и создания исполняемого jar-файла .
org.apache.maven.plugins maven-jar-plugin ${maven-jar-plugin.version} com.baeldung.jar.JarExample
5. Использование Пружинного Ботинка
5.1. Использование Maven и Defaults
Если мы используем Spring Boot с Maven, мы должны сначала подтвердить, что наш параметр упаковки установлен в jar , а не war в нашем pom.xml файл.
4.0.0 spring-boot jar spring-boot
Как только мы узнаем, что это настроено, мы можем запустить пакет цель:
mvn package
5.2. Установка точки входа
Установка нашего основного класса-это то, где мы находим различия между созданием jar с обычным Java-приложением и fat jar для приложения Spring Boot . В приложении Spring Boot основной класс на самом деле является org.springframework.boot.loader.Ярлаунчер .
Хотя наш пример не является приложением Spring Boot, мы могли бы легко настроить его как консольное приложение Spring Boot .
Наш основной класс должен быть указан как начальный класс:
com.baeldung.jar.JarExample
Мы также можем использовать Gradle для создания Spring Boot fat jar .
6. Запуск банки
Теперь, когда у нас есть файл jar, мы можем его запустить. Мы запускаем jar – файлы с помощью команды java .
6.1. Вывод основного класса
Поскольку мы пошли дальше и убедились, что наш основной класс указан в манифесте, мы можем использовать опцию -jar команды java для запуска нашего приложения без указания основного класса:
java -jar JarExample.jar
6.2. Указание основного класса
Мы также можем указать основной класс, когда мы запускаем наше приложение. Мы можем использовать опцию -cp , чтобы убедиться, что наш jar-файл находится в пути к классу, а затем предоставить ваш основной класс в формате package.className :
java -cp JarExample.jar com.baeldung.jar.JarExample
Использование разделителей путей вместо формата пакета также работает:
java -cp JarExample.jar com/baeldung/jar/JarExample
6.3. Перечисление содержимого банки
Мы можем использовать команду jar для перечисления содержимого нашего файла jar:
jar tf JarExample.jar META-INF/ META-INF/MANIFEST.MF com/baeldung/jar/JarExample.class
6.4. Просмотр файла манифеста
Поскольку может быть важно знать, что находится в нашем файле MANIFEST.MF , давайте рассмотрим быстрый и простой способ заглянуть в содержимое, не выходя из командной строки.
Давайте воспользуемся командой unzip с параметром-p:
unzip -p JarExample.jar META-INF/MANIFEST.MF Manifest-Version: 1.0 Created-By: 1.8.0_31 (Oracle Corporation) Main-Class: com.baeldung.jar.JarExample
7. Заключение
В этом уроке мы настроим простое Java-приложение с классом main .
Затем мы рассмотрели три способа создания jar-файлов: с помощью команды jar , с помощью Maven и с помощью приложения Maven Spring Boot.
После того, как мы создали наши jar-файлы, мы вернулись в командную строку и запустили их с выведенным и заданным основным классом.
Мы также узнали, как отображать содержимое файла и как отображать содержимое одного файла в банке.
Как простой пример Java , так и пример Spring Boot доступны на GitHub.