Ответ
pom.xml (Project Object Model) — это фундаментальный файл конфигурации, который определяет проект в Apache Maven. Это единый источник истины для сборки, управления зависимостями, документации и релиза Java-приложения. В контексте DevOps и CI/CD, pom.xml — это скрипт, который инструменты сборки (Jenkins, GitLab CI) используют для понимания, как собрать и протестировать проект.
Что он содержит (ключевые секции):
-
Координаты проекта (GAV): Уникальный идентификатор артефакта.
<groupId>com.mycompany.app</groupId> <artifactId>my-webapp</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> -
Зависимости (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> -
Плагины сборки (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> -
Профили (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) и качества кода.