Что такое родительский POM (parent) в Maven?

«Что такое родительский POM (parent) в Maven?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Родительский POM (Parent POM) — это специальный проект Maven, от которого другие проекты (модули) могут наследовать общие конфигурации. Это ключевой механизм для устранения дублирования в многомодульных сборках.

Основные наследуемые элементы:

  • Зависимости (<dependencies> и <dependencyManagement>).
  • Плагины и их конфигурации (<plugins> и <pluginManagement>).
  • Свойства (<properties>).
  • Версии (<version>), идентификаторы группы (<groupId>).
  • Конфигурации репозиториев, отчётов и сборки.

Пример объявления родителя в дочернем pom.xml:

<project>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.company</groupId>
        <artifactId>platform-parent</artifactId>
        <version>2.0.0</version>
        <!-- Опционально: относительный путь к родительскому pom.xml -->
        <relativePath>../platform-parent/pom.xml</relativePath>
    </parent>
    <artifactId>my-service</artifactId>
    ...
</project>

Ключевые особенности:

  • <relativePath>: Указывает путь для локального поиска родительского POM. Если элемент отсутствует или файл не найден, Maven загрузит артефакт из репозитория.
  • Агрегация vs Наследование: Родительский POM (<packaging>pom</packaging>) может также выступать как агрегатор в многомодульном проекте, объединяя модули в <modules>.
  • Переопределение: Дочерний POM может переопределить любую унаследованную конфигурацию.