Перейти к основному содержимому

Создайте приложение Fat Jar с помощью Spring Boot

· 3 мин. чтения

1. Введение

Одним из самых приятных событий последних лет стало постоянное упрощение развертывания веб-приложений.

Пропустив все скучные промежуточные исторические этапы, мы подошли к сегодняшнему дню — когда мы можем обойтись не только громоздкими сервлетами и XML-шаблонами, но и в основном самими серверами.

В этой статье основное внимание будет уделено созданию « толстой банки» из приложения Spring Boot — в основном для создания единого артефакта, который легко развертывать и запускать.

Boot предоставляет возможности для развертывания без контейнеров прямо из коробки: все, что нам нужно сделать, это добавить пару конфигураций в pom.xml:

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies>

<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.0</version>
</plugin>
</plugins>

2. Создайте и запустите

С этой конфигурацией мы теперь можем просто собрать проект со стандартной чистой установкой mvn — здесь нет ничего необычного.

И запускаем его следующей командой: java -jar <имя-артефакта> — очень просто и интуитивно понятно.

Надлежащее управление процессами выходит за рамки этой статьи, но есть простой способ поддерживать процесс в рабочем состоянии, даже когда мы выходим из системы, — использовать команду nohup : nohup java -jar <имя-артефакта>.

Остановка проектов spring-boot также ничем не отличается от остановки обычного процесса, будь то просто cntrl+c или kill <pid>.

3. Толстая банка / Толстая война

За кулисами spring-boot упаковывает все зависимости проекта в окончательный артефакт вместе с классами сторонних проектов (отсюда и «толстая» банка). Также встроен встроенный сервер Tomcat.

Таким образом, полученный артефакт полностью автономен, его легко развернуть с помощью стандартных инструментов Unix (scp, sftp… и т. д.), и его можно запустить на любом сервере с JVM.

По умолчанию Boot создает jar - файл, но если мы изменим свойство упаковки в pom.xml на war , вместо этого Maven естественным образом создаст war .

Это, конечно, будет исполняемым как автономным, так и развернутым в веб-контейнере.

4. Дальнейшая конфигурация

В большинстве случаев дополнительная настройка не требуется, все «просто работает», но в некоторых конкретных случаях нам может потребоваться явно указать spring-boot , что такое основной класс. Один из способов сделать это — добавить свойство:

<properties>
<start-class>org.foreach.boot.Application</start-class>
</properties>

Если мы не наследуем spring-boot-starter-parent, нам нужно сделать это в плагине Maven:

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.0</version>
<configuration>
<mainClass>org.foreach.boot.Application</mainClass>
<layout>ZIP</layout>
</configuration>
</plugin>

Еще одна вещь, которую нам может понадобиться сделать в некоторых редких случаях, — это указать Maven распаковать некоторые зависимости:

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<requiresUnpack>
<dependency>
<groupId>org.jruby</groupId>
<artifactId>jruby-complete</artifactId>
</dependency>
</requiresUnpack>
</configuration>
</plugin>

5. Вывод

В этой статье мы рассмотрели бессерверное развертывание с использованием «толстых» jar-файлов, созданных с помощью spring-boot.

Как всегда, весь код в этой статье доступен на Github .