Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Фазы жизненного цикла в Maven
Maven использует концепцию "Build Lifecycle" (жизненный цикл сборки), который состоит из фаз. Это ключевая часть архитектуры Maven.
Основные Build Lifecycles
В Maven есть три встроенных lifecycle:
1. Default Lifecycle (самый важный)
Это основной жизненный цикл для компилирования и развёртывания проекта.
Фазы Default Lifecycle (в порядке выполнения):
- validate — Проверка корректности проекта и наличия всей необходимой информации
// Maven проверит pom.xml, зависимости, версии
// Эта фаза редко используется явно
- compile — Компиляция исходного кода в bytecode
mvn compile
# Скомпилирует src/main/java в target/classes
// Пример: компилятор обработает все Java файлы
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
// Становится: target/classes/HelloWorld.class
- test — Запуск unit тестов
mvn test
# Запустит все тесты из src/test/java
// Пример теста (JUnit)
@Test
public void testSum() {
Calculator calc = new Calculator();
assertEquals(4, calc.sum(2, 2));
}
- package — Упаковка скомпилированного кода в JAR или WAR
mvn package
# Создаст target/myapp-1.0.jar
<!-- pom.xml -->
<project>
<groupId>com.example</groupId>
<artifactId>myapp</artifactId>
<version>1.0</version>
<packaging>jar</packaging> <!-- По умолчанию jar -->
</project>
<!-- Результат: target/myapp-1.0.jar -->
- verify — Проверка результатов интеграционных тестов
mvn verify
# Запустит интеграционные тесты (IT*)
// Пример интеграционного теста
public class DatabaseIntegrationTest {
@Test
public void testDatabaseConnection() {
// Тестирует реальное подключение к БД
assertTrue(database.isConnected());
}
}
- install — Установка artifact в локальный Maven репозиторий (~/.m2/repository)
mvn install
# Скопирует JAR в локальный репозиторий
# Теперь другие локальные проекты могут его использовать
<!-- Другой проект может добавить зависимость -->
<dependency>
<groupId>com.example</groupId>
<artifactId>myapp</artifactId>
<version>1.0</version>
</dependency>
- deploy — Развёртывание artifact на удалённый репозиторий (Nexus, Artifactory)
mvn deploy
# Загружает JAR на корпоративный репозиторий
<!-- pom.xml должен содержать -->
<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>https://nexus.company.com/repository/releases</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>https://nexus.company.com/repository/snapshots</url>
</snapshotRepository>
</distributionManagement>
Важные особенности
Фазы выполняются последовательно
Если запустишь фазу, выполнятся ВСЕ предыдущие:
mvn compile # Выполнит: validate, compile
mvn test # Выполнит: validate, compile, test
mvn package # Выполнит: validate, compile, test, package
mvn install # Выполнит: validate, ..., package, install
Можно запустить несколько фаз
mvn clean install deploy
# Очистит target/, затем выполнит весь цикл и deploy
Clean Lifecycle
Отдельный lifecycle для очистки проекта:
# Фазы Clean lifecycle:
mvn pre-clean # Выполни pre-clean задачи
mvn clean # Удали target/ директорию
mvn post-clean # Выполни post-clean задачи
# Пример
mvn clean # Удалит target/
mvn clean compile # Очистит, потом скомпилирует заново
mvn clean test # Очистит и запустит тесты с чистого листа
Site Lifecycle
Для генерации документации сайта проекта:
mvn pre-site # Подготовка
mvn site # Генерация сайта (документация, тесты coverage, reports)
mvn post-site # Постобработка
mvn site-deploy # Деплой сайта на веб-сервер
mvn site
# Создаст target/site/index.html с документацией и отчётами
Практические примеры команд
# Локальная разработка
mvn clean compile # Компилировать
mvn test # Запустить тесты
mvn package # Создать JAR
# Полный цикл перед коммитом
mvn clean verify # Полная проверка
# Развёртывание
mvn clean package deploy # Сборка и отправка на сервер
# Только компиляция без тестов (быстро)
mvn compile -DskipTests # Или: mvn test-compile
# Запуск specific теста
mvn test -Dtest=UserServiceTest
Интеграция с IDE
Maven phases могут запускаться из IDE:
IntelliJ IDEA → Maven Projects → Lifecycle → Double click phase
Eclipse → Project → Run As → Maven build...
VS Code → Maven Extension (ms-vscode.maven)
Customization: Goals и Plugins
Каждая фаза связана с "goals" (задачами) из plugins:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>test</phase> <!-- Привязать к фазе test -->
<goals>
<goal>test</goal> <!-- Запустить goal: test -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Практический workflow
# 1. Разработка и локальное тестирование
$ mvn clean compile test # Скомпилировать и протестировать
# 2. Готово к отправке в репозиторий
$ mvn clean verify # Полная проверка всего
# 3. Запаковать
$ mvn package # Создать JAR/WAR
# 4. Установить в локальный репозиторий
$ mvn install # Для локального использования
# 5. Отправить на корпоративный сервер
$ mvn deploy # На Nexus/Artifactory
# Итого: полный цикл
$ mvn clean verify deploy # Одна команда!
Ключевые выводы
- Default Lifecycle используется в 99% случаев: validate → compile → test → package → verify → install → deploy
- Фазы выполняются в порядке, предыдущие запускаются автоматически
- Clean Lifecycle для очистки: clean, pre-clean, post-clean
- Site Lifecycle для документации: site, pre-site, post-site, site-deploy
- Каждая фаза привязана к plugin goals
- Используй mvn -h для справки или mvn help:describe -Dplugin=PLUGIN_ID для деталей
- Можно запускать несколько фаз одной командой: mvn clean verify deploy
- Используй -DskipTests или -DskipITs для пропуска тестов при необходимости
Best Practices
- Используй mvn clean перед package/deploy
- Всегда запускай mvn verify перед коммитом (включает все тесты)
- Для быстрого build: mvn -o clean compile -DskipTests (offline mode)
- Для отладки используй mvn -X (debug output) или mvn -e (errors)
- Customizируй phases только если действительно нужно (keep it simple)