Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Какая структура у pom-файла?
pom.xml (Project Object Model) — это основной конфигурационный файл в Maven проектах. Рассскажу о его структуре и назначении каждой части.
Базовая структура pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- Основная информация о проекте -->
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>My Application</name>
<description>Описание приложения</description>
<!-- Зависимости -->
<dependencies>...</dependencies>
<!-- Настройки сборки -->
<build>...</build>
</project>
1. Project Info (Информация о проекте)
<project>
<!-- Версия формата POM (обычно 4.0.0) -->
<modelVersion>4.0.0</modelVersion>
<!-- Уникальный идентификатор организации -->
<groupId>com.example.mycompany</groupId>
<!-- Имя артифакта (джара, вара и т.д.) -->
<artifactId>my-app</artifactId>
<!-- Версия проекта -->
<version>1.0.0</version>
<!-- Тип упаковки: jar, war, pom, ear, etc -->
<packaging>jar</packaging>
<!-- Человекочитаемое имя -->
<name>My Cool Application</name>
<!-- Описание проекта -->
<description>A cool application for doing cool things</description>
<!-- URL проекта -->
<url>https://example.com/my-app</url>
<!-- Информация о лицензии -->
<licenses>
<license>
<name>Apache License 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
</license>
</licenses>
</project>
2. Dependencies (Зависимости)
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.0.0</version>
<!-- Scope определяет когда использовать зависимость -->
<scope>compile</scope> <!-- По умолчанию -->
</dependency>
<!-- PostgreSQL Driver -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.5.0</version>
<scope>runtime</scope> <!-- Только при запуске -->
</dependency>
<!-- JUnit для тестирования -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope> <!-- Только для тестов -->
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope> <!-- Только при компиляции -->
</dependency>
</dependencies>
<!-- Управление версиями зависимостей -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2022.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3. Build (Настройки сборки)
<build>
<!-- Название скомпилированного артифакта -->
<finalName>my-app</finalName>
<!-- Plugins - расширяют функционал Maven -->
<plugins>
<!-- Spring Boot Maven Plugin -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Compiler Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>11</source> <!-- Java версия для компиляции -->
<target>11</target>
</configuration>
</plugin>
<!-- Surefire для запуска тестов -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<includes>
<include>**/*Test.java</include>
<include>**/*Tests.java</include>
</includes>
</configuration>
</plugin>
<!-- JAR Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
<!-- Source и test directories -->
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
4. Properties (Переменные)
<properties>
<!-- Версии -->
<java.version>11</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>5.3.0</spring.version>
<junit.version>4.13.2</junit.version>
<!-- Используются в других местах -->
<!-- <version>${spring.version}</version> -->
</properties>
5. Profiles (Профили)
<profiles>
<!-- Production профиль -->
<profile>
<id>production</id>
<properties>
<db.url>jdbc:postgresql://prod-db:5432/myapp</db.url>
<app.debug>false</app.debug>
</properties>
</profile>
<!-- Development профиль -->
<profile>
<id>development</id>
<properties>
<db.url>jdbc:postgresql://localhost:5432/myapp_dev</db.url>
<app.debug>true</app.debug>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
6. Scopes (Области видимости зависимостей)
| Scope | Описание | Примеры |
|---|---|---|
| compile | Во всех сборках | Spring, Hibernate |
| provided | Компилируется, но не входит в JAR | Servlet API |
| runtime | Нужен только при запуске | JDBC Driver |
| test | Только для тестов | JUnit, Mockito |
| system | Из файловой системы | Редко используется |
| import | Импорт BOM | spring-cloud |
Полный пример: Spring Boot приложение
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.0</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>spring-boot-app</artifactId>
<version>1.0.0</version>
<name>Spring Boot Application</name>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<!-- Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Database -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.5.0</version>
<scope>runtime</scope>
</dependency>
<!-- Util -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- Testing -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
Maven команды для сборки
mvn clean # Удалить build директорию
mvn compile # Скомпилировать проект
mvn test # Запустить тесты
mvn package # Создать JAR/WAR
mvn install # Установить в локальный репозиторий
mvn deploy # Задеплоить в удалённый репозиторий
mvn clean install # Очистить и собрать
mvn -P production # Использовать production профиль
Ключевые выводы
pom.xml содержит:
- ✓ Информацию о проекте (groupId, artifactId, version)
- ✓ Список зависимостей с версиями
- ✓ Настройки сборки (plugins, compiler settings)
- ✓ Переменные и профили
- ✓ Лицензионную информацию
Важные элементы:
- groupId:artifactId:version — уникальный идентификатор
- Scopes определяют когда использовать зависимость
- Plugins расширяют возможности Maven
- Properties используются для DRY принципа