Создание JAR-файла в IntelliJ IDEA — это ключевой навык для любого Java-разработчика, будь вы студент, готовящий учебный проект, или профессионал, собирающий релиз для production. Этот процесс, кажущийся на первый взгляд простым, таит в себе важные нюансы, от которых зависит работоспособность вашего приложения. Давайте разберем все шаги детально, от настройки проекта до запуска готового архива.
Подготовка проекта: основа основ
Прежде чем приступать к сборке, убедитесь, что ваш проект корректно настроен. IntelliJ IDEA должна видеть все зависимости и исходный код. Откройте File → Project Structure (Ctrl+Alt+Shift+S). В разделе Project проверьте версию SDK и language level. В Modules убедитесь, что ваши исходные директории (src) помечены как Sources (синяя папка), а ресурсы (например, properties-файлы или изображения) — как Resources.
Совет: Если вы используете систему сборки Maven или Gradle, процесс создания JAR-файла часто проще через их собственные цели (mvn package или gradle jar). Однако понимание ручной сборки через IDE незаменимо для отладки и глубокого понимания процесса.
Пошаговая сборка через Artifacts
Основной инструмент для создания дистрибутивов в IDEA — это Artifacts (Артефакты).
- Снова откройте File → Project Structure и перейдите в раздел Artifacts.
- Нажмите + (Add) и выберите JAR → From modules with dependencies....
- В появившемся окне выберите главный класс (Main Class) вашего приложения — тот, где находится метод
public static void main(String[] args). Это точка входа. - IDEA предложит два варианта извлечения зависимостей:
- extract to the target JAR — все библиотеки будут распакованы и включены в один огромный JAR-файл (fat/uber JAR).
- copy to the output directory and link via manifest — зависимости будут скопированы рядом с JAR в папку lib, а в манифесте прописаны ссылки на них. Это классический, более чистый подход.
- Укажите путь для сохранения JAR-файла в поле Output directory.
- Нажмите OK для создания конфигурации артефакта.
Важность файла MANIFEST.MF
Манифест — это сердце JAR-файла. Он содержит метаинформацию. При сборке через IDEA он создается автоматически, но вы можете его кастомизировать. В том же окне конфигурации артефакта есть поле Manifest File. Вы можете указать путь к существующему файлу или создать новый, например, в src/main/resources/META-INF/. Самая важная строка — Main-Class: com.yourcompany.YourMainClass.
Факт: Если вы собираете библиотеку (не исполняемое приложение), наличие Main-Class в манифесте необязательно. Главное — корректно упакованные скомпилированные классы.
Сборка и запуск
После настройки артефакта процесс сборки прост:
- В главном меню выберите Build → Build Artifacts....
- Выберите ваш артефакт и действие Build (или Rebuild для очистки).
- Готовый JAR-файл появится в указанной вами выходной директории (по умолчанию
out/artifacts/).
Запустить его можно из командной строки (терминала), перейдя в папку с JAR и выполнив команду:
java -jar YourApplicationName.jar
Если вы выбрали опцию с отдельными библиотеками (lib), убедитесь, что папка lib находится в той же директории, что и основной JAR.
Типичные проблемы и их решение
- "No main manifest attribute" — в JAR-файле не указан главный класс. Проверьте настройки артефакта и манифест.
- ClassNotFoundException / NoClassDefFoundError — необходимая зависимость не попала в classpath. Убедитесь, что все библиотеки корректно добавлены в артефакт (проверьте вкладку "Output Layout").
- Проблемы с ресурсами — файлы из папки resources не копируются. Убедитесь, что они помечены как Resources в структуре модуля.
FAQ: Часто задаваемые вопросы
Чем отличается JAR от обычного ZIP-архива?
JAR (Java ARchive) — это специальный формат ZIP-архива, который обязательно содержит каталог META-INF с файлом MANIFEST.MF и структуру скомпилированных .class файлов. Он "понимается" JVM.
Как собрать "толстый" (fat/uber) JAR, содержащий все зависимости?
В окне создания артефакта выберите опцию "extract to the target JAR". Или используйте плагины для Maven (maven-assembly-plugin, maven-shade-plugin) или Gradle (task jar с настройкой включения зависимостей).
Почему мой JAR-файл не запускается двойным кликом в Windows?
Для этого в системе должна быть ассоциация файлов .jar с командой javaw -jar. Часто это настраивается при установке JRE. Вы можете создать .bat или .sh файл-обертку для запуска.
Как включить в JAR не-Java файлы (картинки, конфиги)?
Убедитесь, что эти файлы находятся в директории, помеченной как Resources в настройках модуля. При сборке они автоматически копируются в корень JAR-архива (или сохраняют свою относительную структуру).
Можно ли создать JAR-библиотеку без точки входа (main)?
Да, конечно. Просто не указывайте Main-Class при создании артефакта. Такой JAR будет содержать только ваши классы и может быть добавлен как зависимость в другие проекты.