Все о fat JAR в Java: что это и как использовать

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Толстый JAR-файл — это архив большого размера, совмещающий в одном файле все компоненты вашего приложения, включая его зависимости. Этот подход гарантирует безошибочное функционирование приложения. Создать его можно с помощью Maven и плагина maven-assembly-plugin или с использованием Gradle и shadowJar.

Вот так выглядит пример с Maven:

xml
Скопировать код
<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

А это пример с Gradle:

groovy
Скопировать код
plugins {
    id 'com.github.johnrengelman.shadow' version '5.2.0'
}

Определите входную точку — Main-Class в манифесте, соберите проект и запустите его командой java -jar ваш-толстый-jar.jar. Процесс действительно прост!

Кинга Идем в IT: пошаговый план для смены профессии

Различные типы JAR-файлов

Знание типов JAR-файлов поможет вам выбрать подходящий вариант:

  • "Худой" JAR содержит только ваши классы без внешних библиотек.
  • "Тонкий" JAR включает ваши классы и необходимые прямые зависимости.
  • "Пустой" JAR требует наличия дополнительных JAR-файлов для выполнения своих функций.

Каждый из этих типов имеет своё применение в различных сценариях разработки и развертывания.

Преимущества использования "толстых" JAR-ов

Использование толстых JAR-файлов обезопасит вас от конфликтов зависимостей и ошибок, связанных с неправильной настройкой classpath. Этот подход привносит следующие преимущества:

  • Исключение конфликтов разных версий зависимостей.
  • Уверенность в стабильной работе в различных окружениях.
  • Простота использования без необходимости дополнительной настройки.

Создание "толстого" JAR

Пользователи Maven могут использовать maven-assembly-plugin и maven-shade-plugin. Первый позволяет настроить процесс сборки через дескрипторы, второй — перепаковывает архив, включая все зависимости.

Для тех, кто предпочитает Gradle, подойдет shadowJar, который объединяет все необходимые артефакты и зависимости, умело решая вопросы конфликтов. Также функция zipTree() в Gradle позволяет создавать пользовательские задачи для формирования "толстых" JAR-файлов.

Визуализация

Можно представить толстый JAR как тщательно упакованный чемодан:

Markdown
Скопировать код
Обычный JAR:  🧳👕 (Сбор в последний момент)
Толстый JAR:  🧳👕👖👟🧦🔌📚 (Тщательно подготовлен)

Толстый JAR включает все необходимое:

Markdown
Скопировать код
Толстый JAR: 📦💾
- Ваш код:          👨‍💻💼
- Библиотеки:       📚🔗
- Ресурсы/Настройки: 📃🛠️

Для Java-приложений это универсальное решение:

Markdown
Скопировать код
🚀 Запуск одним кликом мыши 🖱️ с `java -jar command`

Проблемы и их решения при работе с "толстыми" JAR-файлами

У толстых JAR-файлов могут возникнуть следующие проблемы:

  • Увеличенный размер файла может усложнить его распространение и увеличить время загрузки.
  • Возможные конфликты зависимостей из-за дублирования классов.

Чтобы решить эти проблемы:

  • Можно минимизировать JAR при помощи таких инструментов, как ProGuard, который удаляет неиспользуемые классы.
  • Чтобы избежать конфликтов зависимостей, нужно "затенять" классы, изменяя их пакеты.

"Толстый" JAR: лучшие практики

Следуйте лучшим практикам:

  • Обновляйте зависимости, чтобы защитить свое приложение от уязвимостей.
  • Понимайте взаимоотношения между загрузчиками классов и структурой JAR-архивов.
  • Используйте системы непрерывной интеграции для автоматизации сборки.

Альтернативное название: Uber JAR

Термин Uber JAR — это альтернативное название толстого JAR, подчеркивающее его полноту и автономность. За дополнительной информацией можно обратиться на сайт imagej.net.

Полезные материалы

  1. Построение проектов на Java и JVM – Официальная документация Gradle по созданию Java-приложений.
  2. Apache Maven Shade Plugin – Введение – Полное руководство по созданию "толстых" JAR-файлов с Maven Shade Plugin.
  3. Руководство по плагину Spring Boot для Gradle – Подробности упаковки приложений Spring Boot в исполняемые "толстые" JAR-файлы.
  4. DZone — Обзор разницы и компромиссов между "толстыми" и "тонкими" JAR-файлами.