Рубрики
Без рубрики

Руководство по созданию и запуску Jar-файла на Java

Изучите различные способы упаковки и запуска простого Java-приложения в виде jar

Автор оригинала: baeldung.

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.