Ответ
Fat JAR (или Uber JAR, Shadow JAR) — это исполняемый JAR-архив, который содержит не только скомпилированные классы вашего приложения, но и все его зависимости (библиотеки из META-INF, lib и т.д.), упакованные в один файл.
Зачем это нужно? Упрощает развертывание: для запуска приложения требуется только JRE и один файл JAR, без необходимости отдельно управлять библиотеками.
Как создать с помощью Maven:
-
Плагин
maven-assembly-plugin:<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.example.Main</mainClass> <!-- Укажите главный класс --> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>После
mvn clean packageвtarget/появитсяyour-artifact-jar-with-dependencies.jar. -
Плагин
spring-boot-maven-plugin(для Spring Boot): Создает Fat JAR по умолчанию.<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
Недостатки Fat JAR:
- Размер: Файл становится очень большим.
- Конфликты: Возможны конфликты файлов (например,
META-INF/MANIFEST.MFилиspring.factories) из разных библиотек. - Обновления: Для обновления одной библиотеки необходимо пересобрать и переразвернуть весь JAR.
Альтернатива: Использование модульной системы (JPMS) или сборка с помощью jlink для создания минимального образа среды выполнения.