JavaRush /Курсы /Модуль 5. Spring /Лекция 144: Практика: настройка сборки Spring Boot прилож...

Лекция 144: Практика: настройка сборки Spring Boot приложения с использованием Maven

Модуль 5. Spring
15 уровень , 3 лекция
Открыта

Maven: напоминание

Основные понятия в Maven:

  • POM (Project Object Model) — это XML-файл конфигурации (pom.xml), содержащий всю информацию о вашем проекте и его зависимостях.
  • Фазы: Maven выполняет сборку через набор этапов или фаз (compile, test, package и т.д.).
  • Плагины: расширяют функциональность Maven. Например, плагин для упаковки приложения в jar/war.

Подробнее о Maven можно прочитать в официальной документации Maven.


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

Создание Maven-проекта

Для начала создадим Spring Boot приложение, используя Maven. Если вы уже имеете опыт работы с Spring Boot Initializr, это не займет много времени.

  1. Создайте новый проект через Spring Initializr:
    • Выберите Maven в качестве типа сборки.
    • Укажите язык Java и версию Spring Boot (например, 3.1.0).
    • Добавьте зависимости: Spring Web (для создания REST API).
    • Скачайте архив проекта, разархивируйте и откройте его в вашей IDE.
  2. Проверьте структуру проекта. Она должна выглядеть примерно так:

src/
└── main/
    ├── java/
    │   └── com/example/demo/  // Пакет для вашего приложения
    │       └── DemoApplication.java
    └── resources/
        └── application.properties
pom.xml                            // Ваш главный файл конфигурации Maven

* Устройство pom.xml*

Напомним устройство файла pom.xml. Он определяет все зависимости, плагины и настройки. Пример содержимого:


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.0</version>
        <relativePath />
    </parent>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  • groupId и artifactId: идентифицируют ваш проект.
  • spring-boot-starter-parent: базовый POM Spring Boot, задающий важные настройки по умолчанию.
  • dependencies: список библиотек, используемых в проекте (например, Spring Web).
  • spring-boot-maven-plugin: плагин для сборки Spring Boot приложений.

Настройка процесса сборки с Maven

Добавление фазы сборки

Фаза сборки в Maven — это когда проект компилируется, тестируется и упаковывается в исполняемый файл (например, jar). Чтобы убедиться, что все работает, выполните команду:


mvn clean package

Что здесь происходит:

  1. clean: удаляет сгенерированные ранее файлы (target папка).
  2. package: компилирует код (compile), запускает тесты (test), а затем упаковывает проект в .jar файл, который можно запускать.

После успешной сборки, вы найдете файл в папке target/, например: demo-0.0.1-SNAPSHOT.jar. Исполните его:


java -jar target/demo-0.0.1-SNAPSHOT.jar

Попробуйте открыть в браузере http://localhost:8080. Если вы видите ошибку 404, не переживайте, это нормально — у нас пока нет контроллеров!


Добавление пользовательских плагинов

Для улучшения сборочного процесса можно добавить полезные плагины. Например, проверить код на ошибки или указать параметры JVM для развёртывания. Добавим плагин для создания исполняемого jar-файла:


<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.example.demo.DemoApplication</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

Теперь jar-файл будет запускаться корректно, даже если вы захотите передать в него дополнительные параметры.


Практическая часть

Упаковка приложения с зависимостями

Иногда приложение ссылается на внешние библиотеки, которые недоступны в среде исполнения. Для этого можно создать fat jar (или uber jar), включающий все зависимости. В Spring Boot это делается из коробки. Просто выполните:


mvn clean install

Будет создан jar-файл, который включает все зависимости. Можно проверить его размеры через:


ls -lh target/

Обработка тестов в процессе сборки

Maven автоматически запускает тесты перед упаковкой. Давайте добавим простой тест:

1. Создайте файл src/test/java/com/example/demo/DemoApplicationTests.java с содержимым:


package com.example.demo;

import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.assertThat;

class DemoApplicationTests {

    @Test
    void contextLoads() {
        // Простой тест, чтобы проверить, жив ли контекст Spring
        assertThat(1).isEqualTo(1);
    }
}

2. Выполните:


mvn clean test

Если все пройдет успешно, Maven сообщит Tests run: 1, Failures: 0.


Что делать, если что-то не работает?

Если при сборке или запуске возникают ошибки, вот несколько типичных проблем:

  • Ошибка "Main class not found": проверьте, указана ли корректная точка входа в секции mainClass плагина.
  • Java версии несовместимы: убедитесь, что используемая JDK соответствует версии проекта (в данном случае Java 17).
  • Не загружаются зависимости: проверьте, есть ли подключение к интернету, и проверьте ваши Maven репозитории.

Теперь у вас есть готовая сборка вашего Spring Boot приложения с использованием Maven. В следующей лекции мы подключим это к автоматическому пайплайну CI/CD с помощью GitLab CI. Готовьтесь к автоматизации! 🚀

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ