Мастер-класс: Собираем JAR-файл в IntelliJ IDEA от А до Я

Мастер-класс: Собираем JAR-файл в IntelliJ IDEA от А до Я

Создание JAR-файла в IntelliJ IDEA — фундаментальный навык для любого Java-разработчика. Независимо от того, хотите ли вы поделиться своей программой с коллегами, запустить её на сервере или просто упаковать проект в удобный формат, этот процесс должен быть отточен до автоматизма. В этом подробном руководстве мы разберём все способы сборки, от простейшего до создания исполняемого JAR с зависимостями, и раскроем тонкости настройки манифеста.

Что такое JAR и зачем он нужен?

JAR (Java ARchive) — это формат архивных файлов, основанный на ZIP, специально созданный для распространения Java-приложений. Внутри него хранятся скомпилированные классы (.class), ресурсы (изображения, конфигурационные файлы) и метаданные (MANIFEST.MF). Главное преимущество — портативность: вы можете запустить приложение на любой машине с установленной JVM, просто выполнив команду java -jar your_app.jar.

Важно: JAR-файл не является исполняемым в привычном смысле (как .exe). Для его запуска обязательно требуется среда выполнения Java (JRE).

Подготовка проекта

Прежде чем собирать JAR, убедитесь, что ваш проект корректно компилируется и запускается прямо в IDE. Проверьте структуру проекта: исходный код должен находиться в директории src, а зависимости (библиотеки) правильно подключены. Для управления зависимостями рекомендуется использовать Maven или Gradle, но мы рассмотрим и ручной способ.

Шаг 1: Базовая сборка через Artifacts

  1. Откройте меню File → Project Structure (или нажмите Ctrl+Alt+Shift+S).
  2. Перейдите в раздел Artifacts и нажмите +.
  3. Выберите JAR → From modules with dependencies.
  4. В появившемся окне укажите главный класс (Main Class) — точку входа в ваше приложение.
  5. Настройте параметры извлечения зависимостей. Рекомендуется выбрать опцию "Copy to the output directory and link via manifest".
  6. Нажмите OK и примените изменения.

Шаг 2: Конфигурация манифеста

Манифест-файл (META-INF/MANIFEST.MF) — это сердце вашего JAR. Он содержит метаинформацию, включая главный класс и classpath. IntelliJ IDEA обычно генерирует его автоматически, но вы можете создать свой:

  • В том же окне Artifacts найдите поле "Manifest File".
  • Укажите путь, например, src/main/resources/META-INF/MANIFEST.MF.
  • Создайте этот файл и добавьте строки:
    Manifest-Version: 1.0
    Main-Class: com.yourcompany.MainClass

Совет: Если в проекте используются внешние библиотеки, в манифесте нужно указать Class-Path: с перечислением всех JAR-файлов. IntelliJ может сделать это за вас при выборе соответствующей опции.

Шаг 3: Сборка и проверка

  1. В главном меню выберите Build → Build Artifacts.
  2. Выберите ваш артефакт и действие Build.
  3. Готовый JAR-файл появится в папке out/artifacts/ вашего проекта.
  4. Протестируйте его, открыв терминал в этой директории и выполнив: java -jar your_artifact.jar.

Продвинутые сценарии

Сборка с помощью Maven

Если ваш проект использует Maven, процесс становится проще. Добавьте плагин maven-jar-plugin или maven-shade-plugin в ваш pom.xml:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.3.0</version>
      <configuration>
        <archive>
          <manifest>
            <mainClass>com.yourcompany.MainClass</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

Затем выполните в терминале IDEA команду mvn clean package. JAR-файл будет создан в папке target.

Создание "жирного" JAR (Fat/Uber JAR)

Fat JAR содержит все зависимости внутри себя, что делает его полностью самодостаточным. Для этого в Maven используйте maven-shade-plugin, а в Gradle — задачу shadowJar. В ручном режиме через Artifacts выберите опцию "Extract to the target JAR" для зависимостей.

Типичные проблемы и их решения

  • "No main manifest attribute" — не указан главный класс в манифесте. Проверьте настройки Artifacts.
  • ClassNotFoundException — зависимости не включены в classpath. Соберите Fat JAR или правильно настройте Class-Path в манифесте.
  • Ошибки с версией Java — убедитесь, что версия JRE для запуска соответствует версии, использованной для компиляции.

FAQ — Часто задаваемые вопросы

В чём разница между JAR, WAR и EAR?

JAR — для стандартных приложений и библиотек, WAR — для веб-приложений, EAR — для корпоративных приложений, содержащих несколько модулей.

Можно ли создать исполняемый JAR без IDE?

Да, с помощью утилиты jar из JDK или сборщиков Maven/Gradle через командную строку.

Почему мой JAR-файл такой большой?

Вероятно, вы собрали Fat JAR со всеми зависимостями. Используйте инструменты анализа (например, jdeps) для оптимизации.

Как добавить иконку для JAR-файла в Windows?

JAR сам по себе не поддерживает иконки. Для этого нужно создать EXE-обёртку с помощью Launch4j, JSmooth или аналогичных утилит.

Можно ли запустить JAR на компьютере без установленной Java?

Нет, обязательно требуется JRE. Но вы можете создать нативное приложение с помощью GraalVM или использовать упаковщики (jpackage).