Home » Шпаргалка по командам и опциям Maven
Шпаргалка по командам и опциям Maven

Шпаргалка по командам и опциям Maven

Если ты развертываешь приложения на Java и администрируешь серверы, то наверняка сталкивался с Maven. Эта штука может превратить твою жизнь в рай автоматизации или в настоящий ад, если не знать, как с ней обращаться. Сегодня разберём все основные команды и опции Maven, которые реально нужны в продакшене, плюс несколько трюков, которые сэкономят тебе кучу времени при настройке CI/CD пайплайнов и деплойменте на сервера.

Maven — это не просто система сборки, это целая экосистема управления проектами, которая может автоматизировать практически все процессы от компиляции до деплоя. Знание его команд и опций критично для любого, кто работает с Java-приложениями на серверах.

Как работает Maven: основы для серверных задач

Maven работает по принципу “соглашения вместо конфигурации”. У него есть стандартный жизненный цикл сборки с фазами: validate, compile, test, package, verify, install, deploy. Каждая фаза выполняет определенные задачи, и ты можешь запускать их по отдельности или цепочкой.

Основные концепции:

  • POM (Project Object Model) — файл pom.xml содержит всю конфигурацию проекта
  • Репозитории — локальный (~/.m2/repository) и удаленные (Maven Central, корпоративные Nexus/Artifactory)
  • Плагины — расширяют функциональность Maven
  • Профили — позволяют настраивать разные конфигурации для разных сред

Основные команды Maven: полный список

Вот список команд, которые реально используются в серверной разработке:

# Основные команды жизненного цикла
mvn clean                    # Очистка target директории
mvn compile                  # Компиляция исходного кода
mvn test                     # Запуск тестов
mvn package                  # Создание JAR/WAR файла
mvn install                  # Установка артефакта в локальный репозиторий
mvn deploy                   # Деплой в удаленный репозиторий

# Комбинированные команды (самые популярные)
mvn clean compile           # Очистка + компиляция
mvn clean test              # Очистка + тесты
mvn clean package           # Очистка + создание пакета
mvn clean install           # Очистка + установка в локальный репозиторий
mvn clean deploy            # Очистка + деплой

# Пропуск тестов (для быстрой сборки)
mvn clean package -DskipTests     # Пропустить выполнение тестов
mvn clean package -Dmaven.test.skip=true  # Пропустить компиляцию и выполнение тестов

# Работа с профилями
mvn clean package -Pproduction    # Активация профиля production
mvn clean package -Pdev,testing   # Активация нескольких профилей

# Отладка и диагностика
mvn dependency:tree           # Показать дерево зависимостей
mvn dependency:resolve        # Разрешить все зависимости
mvn help:effective-pom        # Показать итоговый POM
mvn help:active-profiles      # Показать активные профили
mvn versions:display-dependency-updates  # Показать устаревшие зависимости

# Очистка и обновление
mvn dependency:purge-local-repository    # Очистить локальный репозиторий
mvn clean install -U         # Принудительное обновление snapshot зависимостей

# Запуск приложения
mvn spring-boot:run          # Запуск Spring Boot приложения
mvn exec:java               # Запуск Java класса
mvn jetty:run               # Запуск с Jetty сервером
mvn tomcat7:run             # Запуск с Tomcat

# Генерация проектов
mvn archetype:generate      # Создание нового проекта из архетипа
mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Полезные опции и параметры

Эти опции сильно упрощают работу с Maven в серверных окружениях:

# Основные опции
-q, --quiet                 # Тихий режим (минимум логов)
-X, --debug                 # Подробный вывод для отладки
-e, --errors                # Показать стектрейсы ошибок
-f, --file                  # Указать путь к pom.xml
-o, --offline               # Офлайн режим (без загрузки зависимостей)
-U, --update-snapshots      # Принудительно обновить SNAPSHOT зависимости
-T, --threads               # Количество потоков для параллельной сборки
-P, --activate-profiles     # Активировать профили
-D, --define                # Установить системное свойство

# Примеры использования
mvn clean install -q        # Тихая сборка
mvn clean package -T 4      # Сборка в 4 потока
mvn clean install -o        # Офлайн сборка
mvn clean package -DskipTests=true -q  # Быстрая сборка без тестов
mvn clean install -Dmaven.repo.local=/tmp/repo  # Кастомный локальный репозиторий

Настройка Maven для серверной среды

При работе с серверами важно правильно настроить Maven. Вот пошаговая настройка:

1. Настройка settings.xml

Файл ~/.m2/settings.xml — это глобальная конфигурация Maven:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                              https://maven.apache.org/xsd/settings-1.0.0.xsd">

  <localRepository>/opt/maven/repository</localRepository>

  <servers>
    <server>
      <id>nexus-releases</id>
      <username>${env.NEXUS_USERNAME}</username>
      <password>${env.NEXUS_PASSWORD}</password>
    </server>
  </servers>

  <mirrors>
    <mirror>
      <id>nexus</id>
      <mirrorOf>central</mirrorOf>
      <url>https://nexus.company.com/repository/maven-public/</url>
    </mirror>
  </mirrors>

  <profiles>
    <profile>
      <id>production</id>
      <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.test.skip>true</maven.test.skip>
      </properties>
    </profile>
  </profiles>
</settings>

2. Настройка переменных окружения

# .bashrc или .profile
export M2_HOME=/opt/maven
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$MAVEN_HOME/bin
export MAVEN_OPTS="-Xmx2048m -XX:MaxPermSize=512m"
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk

Практические кейсы и примеры

Кейс 1: Автоматизация деплоя на сервер

Создаем профиль для продакшена в pom.xml:

<profiles>
  <profile>
    <id>production</id>
    <properties>
      <spring.profiles.active>prod</spring.profiles.active>
      <maven.test.skip>true</maven.test.skip>
    </properties>
    <build>
      <plugins>
        <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <configuration>
            <executable>true</executable>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

Скрипт деплоя:

#!/bin/bash
# deploy.sh

APP_NAME="my-app"
VERSION="1.0.0"
DEPLOY_DIR="/opt/apps/${APP_NAME}"
SERVICE_NAME="${APP_NAME}.service"

# Сборка
mvn clean package -Pproduction -DskipTests

# Остановка сервиса
sudo systemctl stop ${SERVICE_NAME}

# Копирование файлов
sudo cp target/${APP_NAME}-${VERSION}.jar ${DEPLOY_DIR}/app.jar

# Запуск сервиса
sudo systemctl start ${SERVICE_NAME}
sudo systemctl status ${SERVICE_NAME}

Кейс 2: Многомодульный проект

Для больших проектов используем многомодульную структуру:

# Сборка всех модулей
mvn clean install

# Сборка только конкретного модуля
mvn clean install -pl module-name

# Сборка модуля и его зависимостей
mvn clean install -pl module-name -am

# Сборка всех модулей, которые зависят от данного
mvn clean install -pl module-name -amd

Сравнение с другими системами сборки

Критерий Maven Gradle Ant
Простота изучения Средняя Сложная Простая
Скорость сборки Средняя Высокая Низкая
Управление зависимостями Отличное Отличное Нет
Размер сообщества Огромное Большое Среднее
Подходит для больших проектов Да Да Нет

Оптимизация Maven для серверов

При работе на серверах важно оптимизировать Maven для лучшей производительности:

1. Параллельная сборка

# Использовать все доступные ядра
mvn clean install -T 1C

# Использовать 4 потока
mvn clean install -T 4

# Для многомодульных проектов
mvn clean install -T 4 -Dmaven.compile.fork=true

2. Кэширование зависимостей

# Настройка в .mvn/maven.config
-Dmaven.repo.local=/shared/maven/repository
-Dmaven.artifact.threads=10

3. Оптимизация JVM

# .mavenrc
export MAVEN_OPTS="-Xmx4g -XX:+UseG1GC -XX:+UseStringDeduplication"

Интеграция с CI/CD и автоматизация

Maven отлично интегрируется с системами непрерывной интеграции:

Jenkins Pipeline

pipeline {
    agent any
    
    tools {
        maven 'Maven-3.8.6'
        jdk 'OpenJDK-11'
    }
    
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean compile'
            }
        }
        
        stage('Test') {
            steps {
                sh 'mvn test'
            }
            post {
                always {
                    junit 'target/surefire-reports/*.xml'
                }
            }
        }
        
        stage('Package') {
            steps {
                sh 'mvn package -DskipTests'
            }
        }
        
        stage('Deploy') {
            when {
                branch 'master'
            }
            steps {
                sh 'mvn deploy -DskipTests'
            }
        }
    }
}

GitHub Actions

name: CI/CD Pipeline

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v3
    
    - name: Set up JDK 11
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'temurin'
        
    - name: Cache Maven packages
      uses: actions/cache@v3
      with:
        path: ~/.m2
        key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
        
    - name: Build with Maven
      run: mvn clean package -DskipTests
      
    - name: Run tests
      run: mvn test

Полезные плагины для серверной разработки

Вот список плагинов, которые реально экономят время:

# Dockerfile Maven Plugin - для контейнеризации
mvn dockerfile:build
mvn dockerfile:push

# Spring Boot Plugin - для Spring приложений
mvn spring-boot:run
mvn spring-boot:build-image

# Flyway Plugin - для миграций БД
mvn flyway:migrate
mvn flyway:clean

# Versions Plugin - для управления версиями
mvn versions:display-dependency-updates
mvn versions:use-latest-versions

# Sonarqube Plugin - для анализа кода
mvn sonar:sonar

# Jacoco Plugin - для покрытия тестами
mvn jacoco:report

Нестандартные способы использования

Несколько трюков, которые мало кто знает:

1. Создание собственного архетипа

# Создать архетип из существующего проекта
mvn archetype:create-from-project

# Установить архетип локально
cd target/generated-sources/archetype
mvn install

# Использовать собственный архетип
mvn archetype:generate -DarchetypeGroupId=com.company -DarchetypeArtifactId=custom-archetype

2. Выполнение произвольных команд

# Запуск произвольной Java программы
mvn exec:java -Dexec.mainClass="com.example.Main" -Dexec.args="arg1 arg2"

# Выполнение shell команд
mvn exec:exec -Dexec.executable="bash" -Dexec.args="-c 'echo Hello World'"

3. Условная сборка

# Активация профиля в зависимости от OS
mvn clean package -P linux
mvn clean package -P windows

# Активация профиля в зависимости от переменной окружения
mvn clean package -P${ENV}

Диагностика и решение проблем

Часто встречающиеся проблемы и их решения:

# Проблема: OutOfMemoryError
export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512m"

# Проблема: Медленная сборка
mvn clean install -T 4 -o

# Проблема: Конфликты зависимостей
mvn dependency:tree -Dverbose
mvn dependency:analyze

# Проблема: Проблемы с сетью
mvn clean install -Dmaven.wagon.http.retryHandler.count=3

# Проблема: Поврежденные зависимости
mvn dependency:purge-local-repository
rm -rf ~/.m2/repository

Безопасность и best practices

  • Не храни пароли в pom.xml — используй переменные окружения или settings.xml
  • Регулярно обновляй зависимости — используй mvn versions:display-dependency-updates
  • Проверяй уязвимости — используй OWASP dependency-check плагин
  • Используй корпоративные репозитории — Nexus или Artifactory для контроля зависимостей
  • Версионируй все — избегай SNAPSHOT зависимостей в продакшене

Для деплоя Maven-приложений на серверах рекомендую использовать качественные VPS с SSD дисками — аренда VPS или выделенные серверы для крупных проектов.

Заключение и рекомендации

Maven — это мощный инструмент, который при правильной настройке может значительно упростить работу с Java-проектами на серверах. Основные рекомендации:

  • Изучи жизненный цикл — понимание фаз поможет оптимизировать процесс сборки
  • Настрой профили — для разных окружений (dev, test, prod)
  • Используй параллельную сборку — экономит время на многоядерных серверах
  • Автоматизируй все — интегрируй Maven в CI/CD пайплайны
  • Мониторь зависимости — регулярно обновляй и проверяй на уязвимости

Помни: Maven — это не просто инструмент сборки, это целая экосистема, которая может автоматизировать практически все аспекты работы с Java-проектами. Потрать время на изучение его возможностей, и он окупится многократно в виде сэкономленного времени и стабильности деплоймента.

Полезные ссылки для дальнейшего изучения:


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked