Как создать jar-файл и запустить его
jar (Java ARchive) — архив, в котором лежат скомпилированные классы программы и файл-описание (манифест). Исполняемый jar запускается одной командой на любом компьютере с Java. Собрать его можно утилитой jar из JDK — в терминале, как описано ниже, — или в среде разработки: тогда сразу переходите к разделу В IntelliJ IDEA.
Сборка командой jar
Пусть программа — файл Main.java с классом Main, в котором есть метод main. Откройте терминал в папке с файлом и выполните три команды:
$ javac -d out Main.java
$ jar cfe app.jar Main -C out .
$ java -jar app.jarjavac -d out Main.javaкомпилирует программу и кладёт файлы.classв папкуout.jar cfe app.jar Main -C out .собирает архив:c— создать,f— имя файла (app.jar),e— главный класс (Main), с которого начинается запуск.-C out .— взять всё содержимое папкиout.java -jar app.jarзапускает программу из архива.
Если классов несколько, javac компилирует их все: javac -d out *.java (в Linux и macOS) или перечислите файлы через пробел.
Та же сборка в длинной записи (работает с Java 9):
$ jar --create --file app.jar --main-class Main -C out .Посмотреть, что попало в архив, — jar tf app.jar.
Класс в пакете
Если в начале файла есть строка package com.example;, главный класс указывается полным именем:
$ javac -d out src/com/example/Main.java
$ jar cfe app.jar com.example.Main -C out .Ошибка no main manifest attribute
no main manifest attribute, in app.jarВ манифесте архива не указан главный класс — jar собрали без e (или без --main-class). Пересоберите с ним. Другой способ — свой файл манифеста manifest.txt с одной строкой:
Main-Class: MainПосле строки обязательно нужен перевод строки (пустая строка в конце файла), иначе последняя строка не прочитается. Сборка с этим манифестом — флаг m:
$ jar cfm app.jar manifest.txt -C out .Запустить класс из jar без манифеста тоже можно — указав архив как путь к классам: java -cp app.jar Main.
В IntelliJ IDEA
- File → Project Structure → Artifacts, кнопка + → JAR → From modules with dependencies.
- В поле Main Class выберите класс с методом
mainи нажмите OK. - Build → Build Artifacts → выберите артефакт → Build.
Готовый jar появится в папке out/artifacts проекта. В проектах на Maven и Gradle jar собирается их командами (mvn package, gradle jar), а главный класс указывается в файле сборки.
Подводные камни
- Программа использует чужие библиотеки. Обычный jar содержит только ваши классы — при запуске библиотеки должны быть рядом и указаны в манифесте (
Class-Path) или собраны в один большой jar («fat jar»). Для этого у Maven и Gradle есть свои дополнения сборки. - Двойной щелчок по jar в Windows запускает программу без окна консоли. Программа, которая пишет в консоль через
System.out.println, при этом ничего не покажет — запускайте её командойjava -jar app.jar. - Версия Java. jar, собранный в Java 21, не запустится в Java 17 и более ранних версиях: ошибка
UnsupportedClassVersionError. Чтобы собрать для более старой версии, компилируйте сjavac --release 17.