← Назад к вопросам

Что указывается в pom.xml в Maven

1.8 Middle🔥 132 комментариев
#CI/CD и автоматизация

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Структура и назначение pom.xml в Maven

pom.xml (Project Object Model) — это фундаментальный файл конфигурации в Apache Maven, описывающий проект, его зависимости, процесс сборки и другие метаданные. Он служит единым источником правды для всего жизненного цикла проекта.

Основные разделы pom.xml

1. Базовые идентификаторы проекта (Maven Coordinates)

Эти элементы однозначно идентифицируют артефакт в репозитории.

<project>
    <modelVersion>4.0.0</modelVersion>
    <!-- Группа проекта (обычно обратное доменное имя) -->
    <groupId>com.example.mycompany</groupId>
    <!-- Уникальный идентификатор артефакта -->
    <artifactId>my-application</artifactId>
    <!-- Версия проекта (часто с SNAPSHOT для разработки) -->
    <version>1.0.0-SNAPSHOT</version>
    <!-- Тип упаковки: jar, war, ear, pom и др. -->
    <packaging>jar</packaging>
</project>

2. Метаинформация и контакты

<name>Моё приложение</name>
<description>Подробное описание проекта</description>
<url>http://www.example.com</url>
<inceptionYear>2024</inceptionYear>

<!-- Лицензия -->
<licenses>
    <license>
        <name>Apache License 2.0</name>
        <url>https://www.apache.org/licenses/LICENSE-2.0</url>
    </license>
</licenses>

<!-- Информация о разработчиках -->
<developers>
    <developer>
        <id>dev123</id>
        <name>Иван Петров</name>
        <email>ivan@example.com</email>
        <roles>
            <role>Architect</role>
            <role>Developer</role>
        </roles>
    </developer>
</developers>

3. Зависимости (Dependencies)

Ключевой раздел, где объявляются все библиотеки, необходимые для проекта.

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.23</version>
        <!-- Область видимости: compile, provided, runtime, test, system -->
        <scope>compile</scope>
        <!-- Исключение конфликтующих транзитивных зависимостей -->
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
    <!-- Тестовая зависимость -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

4. Управление зависимостями (Dependency Management)

Позволяет централизованно управлять версиями зависимостей, особенно полезно в многомодульных проектах.

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>5.3.23</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

5. Репозитории (Repositories)

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

<repositories>
    <repository>
        <id>central</id>
        <name>Central Repository</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    
    <!-- Кастомный репозиторий -->
    <repository>
        <id>my-company-repo</id>
        <url>https://nexus.mycompany.com/repository/maven-public/</url>
    </repository>
</repositories>

<!-- Репозиторий для публикации артефактов -->
<distributionManagement>
    <repository>
        <id>releases</id>
        <url>https://nexus.mycompany.com/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <url>https://nexus.mycompany.com/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

6. Сборка и плагины (Build & Plugins)

Конфигурация процесса сборки, компиляции, тестирования и упаковки.

<build>
    <!-- Имя финального артефакта (по умолчанию: artifactId-version) -->
    <finalName>${project.artifactId}-${project.version}</finalName>
    
    <!-- Исходные директории -->
    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    
    <!-- Плагины -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <source>11</source>
                <target>11</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        
        <!-- Плагин для создания исполняемого JAR -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.7.8</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    
    <!-- Фильтрация ресурсов (подстановка переменных) -->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>

7. Профили (Profiles)

Позволяют определять различные конфигурации для разных сред (dev, test, prod).

<profiles>
    <profile>
        <id>development</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <environment>dev</environment>
            <log.level>DEBUG</log.level>
        </properties>
    </profile>
    
    <profile>
        <id>production</id>
        <properties>
            <environment>prod</environment>
            <log.level>WARN</log.level>
        </properties>
        <build>
            <plugins>
                <!-- Специфичные плагины для production -->
            </plugins>
        </build>
    </profile>
</profiles>

8. Свойства (Properties)

Централизованное определение переменных для повторного использования.

<properties>
    <!-- Версии зависимостей -->
    <java.version>11</java.version>
    <spring.version>5.3.23</spring.version>
    <junit.version>4.13.2</junit.version>
    
    <!-- Кодировка -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    
    <!-- Кастомные свойства -->
    <deploy.dir>/opt/myapp</deploy.dir>
</properties>

9. Наследование и агрегация (для многомодульных проектов)

<!-- Родительский POM -->
<parent>
    <groupId>com.example</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0.0</version>
    <relativePath>../pom.xml</relativePath>
</parent>

<!-- Модули в многомодульном проекте -->
<modules>
    <module>core-module</module>
    <module>web-module</module>
    <module>service-module</module>
</modules>

Практическое значение для DevOps

С точки зрения DevOps инженера, pom.xml является критически важным артефактом, потому что:

  • Детерминированность сборок: Четкое указание версий зависимостей обеспечивает воспроизводимость сборок
  • Интеграция с CI/CD: Maven-плагины интегрируются с Jenkins, GitLab CI, GitHub Actions
  • Управление артефактами: Конфигурация distributionManagement определяет поток артефактов в Nexus/Artifactory
  • Параметризация: Профили и свойства позволяют адаптировать сборку под разные среды
  • Качество кода: Настройка плагинов для статического анализа (Checkstyle, PMD, SpotBugs)
  • Контейнеризация: Плагины для создания Docker-образов (jib-maven-plugin, docker-maven-plugin)

Правильно настроенный pom.xml обеспечивает стабильность, безопасность и эффективность всего pipeline сборки и доставки приложений.

Что указывается в pom.xml в Maven | PrepBro