«1. Обзор

Spring Boot предоставляет родительский POM для упрощения создания приложений Spring Boot.

Однако использование родительского POM не всегда может быть желательным, если у нас уже есть родитель для наследования.

В этом кратком руководстве мы рассмотрим, как мы можем использовать Boot без родительского стартера.

2. Spring Boot без родительского POM

Родительский pom.xml заботится об управлении зависимостями и плагинами. По этой причине наследование от него обеспечивает ценную поддержку в приложении, поэтому обычно это предпочтительный способ действий при создании загрузочного приложения. Вы можете найти более подробную информацию о том, как создать приложение на основе родительского стартера, в нашей предыдущей статье.

Однако на практике мы можем быть ограничены правилами проектирования или другими предпочтениями в использовании другого родителя.

К счастью, Spring Boot предлагает альтернативу наследованию от родительского стартера, которая по-прежнему может предоставить нам некоторые из своих преимуществ.

Если мы не используем родительский POM, мы все равно можем извлечь выгоду из управления зависимостями, добавив артефакт spring-boot-dependencies с scope=import:

<dependencyManagement>
     <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.4.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Далее мы можем начать просто добавлять Зависимости Spring и использование функций Spring Boot:

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

С другой стороны, без родительского POM мы больше не получаем преимуществ от управления плагинами. Это означает, что нам нужно явно добавить spring-boot-maven-plugin:

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

3. Переопределение версий зависимостей

Если мы хотим использовать версию, отличную от той, которой управляет Boot, мы необходимо объявить его в разделе dependencyManagement до того, как будут объявлены spring-boot-dependencies:

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

Напротив, простое объявление версии для зависимости вне тега dependencyManagement больше не будет работать.

4. Заключение

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

Исходный код примеров можно найти на GitHub.