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

Какие знаешь фазы жизненного цикла в Maven?

1.0 Junior🔥 181 комментариев
#Другое

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

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

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

# Фазы жизненного цикла в Maven

Maven использует концепцию "Build Lifecycle" (жизненный цикл сборки), который состоит из фаз. Это ключевая часть архитектуры Maven.

Основные Build Lifecycles

В Maven есть три встроенных lifecycle:

1. Default Lifecycle (самый важный)

Это основной жизненный цикл для компилирования и развёртывания проекта.

Фазы Default Lifecycle (в порядке выполнения):

  1. validate — Проверка корректности проекта и наличия всей необходимой информации
// Maven проверит pom.xml, зависимости, версии
// Эта фаза редко используется явно
  1. 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
  1. test — Запуск unit тестов
mvn test
# Запустит все тесты из src/test/java
// Пример теста (JUnit)
@Test
public void testSum() {
    Calculator calc = new Calculator();
    assertEquals(4, calc.sum(2, 2));
}
  1. 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 -->
  1. verify — Проверка результатов интеграционных тестов
mvn verify
# Запустит интеграционные тесты (IT*)
// Пример интеграционного теста
public class DatabaseIntegrationTest {
    @Test
    public void testDatabaseConnection() {
        // Тестирует реальное подключение к БД
        assertTrue(database.isConnected());
    }
}
  1. install — Установка artifact в локальный Maven репозиторий (~/.m2/repository)
mvn install
# Скопирует JAR в локальный репозиторий
# Теперь другие локальные проекты могут его использовать
<!-- Другой проект может добавить зависимость -->
<dependency>
    <groupId>com.example</groupId>
    <artifactId>myapp</artifactId>
    <version>1.0</version>
</dependency>
  1. 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         # Одна команда!

Ключевые выводы

  1. Default Lifecycle используется в 99% случаев: validate → compile → test → package → verify → install → deploy
  2. Фазы выполняются в порядке, предыдущие запускаются автоматически
  3. Clean Lifecycle для очистки: clean, pre-clean, post-clean
  4. Site Lifecycle для документации: site, pre-site, post-site, site-deploy
  5. Каждая фаза привязана к plugin goals
  6. Используй mvn -h для справки или mvn help:describe -Dplugin=PLUGIN_ID для деталей
  7. Можно запускать несколько фаз одной командой: mvn clean verify deploy
  8. Используй -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)
Какие знаешь фазы жизненного цикла в Maven? | PrepBro