Что такое файл pom.xml в Maven?

«Что такое файл pom.xml в Maven?» — вопрос из категории CI/CD, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

pom.xml (Project Object Model) — это фундаментальный файл конфигурации, который определяет проект в Apache Maven. Это единый источник истины для сборки, управления зависимостями, документации и релиза Java-приложения. В контексте DevOps и CI/CD, pom.xml — это скрипт, который инструменты сборки (Jenkins, GitLab CI) используют для понимания, как собрать и протестировать проект.

Что он содержит (ключевые секции):

  1. Координаты проекта (GAV): Уникальный идентификатор артефакта.

    <groupId>com.mycompany.app</groupId>
    <artifactId>my-webapp</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
  2. Зависимости (Dependencies): Библиотеки, необходимые для компиляции, тестирования и работы.

    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.7.0</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope> <!-- Зависимость только для тестов -->
      </dependency>
    </dependencies>
  3. Плагины сборки (Build Plugins): Определяют, как происходит сборка (компилятор, создание JAR/WAR, запуск тестов, анализ кода SonarQube).

    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.2</version>
          <configuration>
            <skipTests>${skip.unit.tests}</skipTests> <!-- Параметризация из CI -->
          </configuration>
        </plugin>
      </plugins>
    </build>
  4. Профили (Profiles): Конфигурации для разных сред (dev, staging, prod). В CI/CD активируются переменными окружения.

    <profiles>
      <profile>
        <id>production</id>
        <properties>
          <environment>prod</environment>
        </properties>
      </profile>
    </profiles>

Для DevOps-инженера pom.xml важен, потому что:

  • Он определяет жизненный цикл сборки (mvn clean compile test package).
  • Управляет версиями зависимостей, что критично для воспроизводимости сборок.
  • Интегрируется с артефакт-репозиториями (Nexus, Artifactory) для публикации и загрузки артефактов.
  • Содержит конфигурацию плагинов для развёртывания (например, docker-maven-plugin) и качества кода.