Глиф Учебники

Как создать jar-файл и запустить его

Справочник · Java · 2 минуты чтения

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.jar
  1. javac -d out Main.java компилирует программу и кладёт файлы .class в папку out.
  2. jar cfe app.jar Main -C out . собирает архив: c — создать, f — имя файла (app.jar), e — главный класс (Main), с которого начинается запуск. -C out . — взять всё содержимое папки out.
  3. 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

  1. File → Project Structure → Artifacts, кнопка + → JAR → From modules with dependencies.
  2. В поле Main Class выберите класс с методом main и нажмите OK.
  3. Build → Build Artifacts → выберите артефакт → Build.

Готовый jar появится в папке out/artifacts проекта. В проектах на Maven и Gradle jar собирается их командами (mvn package, gradle jar), а главный класс указывается в файле сборки.

Подводные камни