Ответ
Для поддержания согласованности и управляемости в мультимодульном проекте микросервисов используются следующие механизмы Maven:
1. Родительский POM (Parent POM)
Корневой pom.xml, который определяет общие для всех сервисов настройки:
- Версии всех зависимостей (
<dependencyManagement>). - Версии и конфигурации плагинов (
<pluginManagement>). - Общие свойства (например,
<java.version>17</java.version>).
2. Модули (Modules)
Каждый микросервис объявляется как <module> в родительском POM и наследует от него.
3. BOM (Bill of Materials) Импорт готовых BOM, например Spring Boot или Spring Cloud, для гарантии совместимости версий библиотек.
Пример структуры родительского POM:
<!-- parent-pom/pom.xml -->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.company</groupId>
<artifactId>microservices-parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<modules>
<module>auth-service</module>
<module>order-service</module>
</modules>
<properties>
<java.version>17</java.version>
<spring-boot.version>3.1.5</spring-boot.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Импорт BOM Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Пример POM микросервиса:
<!-- auth-service/pom.xml -->
<project>
<parent>
<groupId>com.company</groupId>
<artifactId>microservices-parent</artifactId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>auth-service</artifactId>
<dependencies>
<!-- Версия берётся из dependencyManagement родителя -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
Преимущества: централизованное управление версиями, единые стандарты сборки, упрощение обновлений.