Скидка 50% на все тарифы, ограниченное время. От $2.48/mo
18 мин осталось
Веб и бизнес-приложения

Maven в деталях: команды, параметры и шпаргалка для эффективной разработки

Ада Лавгуд By Ада Лавгуд 18 мин. чтения Обновлено 23 февраля 2025 г.
руководство по командам mvn

Инструменты автоматизации и разработки — одни из ключевых составляющих любого проекта. В этой статье мы разберём Maven: мощный инструмент автоматизации сборки для проектов Java. Maven упрощает процесс сборки и задаёт единую структуру для проектов, что делает их удобнее в управлении и понимании. Статья охватывает практически все аспекты работы с Maven: широкий набор команд и опций, которые ускорят ваш рабочий процесс разработки. Мы рассмотрим управление серверами и контейнерами, управление исходным кодом (SCM) и GPG для подписи артефактов. Отдельно остановимся на командах управления плагинами, сборке и дистрибуции, а также генерации сайтов и отчётов проекта. К концу этого руководства у вас будет полное понимание команд и опций Maven.

Обзор Maven: жизненный цикл проекта

В языке идиш слово Maven означает «накопитель знаний». Это значение точно отражает суть Maven как инструмента автоматизации для Java-проектов. Maven упрощает сборку и управление проектами, автоматизируя различные задачи и предоставляя единую систему сборки.

Чтобы понять, как работает Maven, разберём концепцию Модель объектов проекта (POM). POM — это XML-файл, который содержит информацию о проекте и параметры его конфигурации. Maven использует POM как основу своей работы: из этого файла он берёт зависимости проекта, директории сборки, исходного кода и тестов, а также цели выполнения.

После того как проект и его зависимости определены в pom.xml, каждый запуск команды Maven начинается с чтения pom-файла, чтобы выполнить нужную фазу сборки. От момента создания проекта до его публикации существует полный жизненный цикл, который определяет последовательность фаз, через которые проходит проект. Каждая фаза представляет отдельный этап цикла и выполняет конкретные задачи: компиляцию исходного кода, запуск тестов, упаковку кода в дистрибутивный формат. Всё это делает жизненный цикл Maven важной концепцией для понимания. Рассмотрим его фазы подробнее:

  1. Проверка: На этой фазе проверяется корректность проекта и наличие всех необходимых данных.
  2. Компиляция: На этой фазе компилируется исходный код проекта.
  3. Тест: На этой фазе скомпилированный код тестируется с помощью подходящего фреймворка модульного тестирования.
  4. Упаковка: На этой фазе скомпилированный код упаковывается в дистрибутивный формат (например, JAR, WAR).
  5. Установка: На фазе установки пакет помещается в локальный репозиторий и становится доступным для других проектов на том же компьютере.
  6. Развертывание: На этой фазе финальный пакет копируется в удалённый репозиторий для совместного использования другими разработчиками и проектами.

Для каждой из этих фаз существует соответствующая команда mvn — все они будут рассмотрены в следующих разделах этой шпаргалки по Maven. Именно эти команды наиболее важны для управления процессом сборки проекта.

Управление зависимостями

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

Как Maven управляет зависимостями

Maven использует централизованный репозиторий — Центральный репозиторий Maven, где хранится большое количество библиотек и плагинов. Когда проекту требуется зависимость, Maven автоматически загружает нужные библиотеки из центрального репозитория и сохраняет их в локальном. Локальный репозиторий выступает кешем на вашем компьютере и сокращает время загрузки при последующих сборках.

Зависимости в Maven указываются в файле pom.xml в разделе <dependencies> раздел. Каждая зависимость определяется набором координат: groupId, artifactId, и version.

Области видимости зависимостей

В Maven можно указывать область видимости зависимостей. Этот параметр определяет доступность зависимости в classpath и фазу жизненного цикла, в которой она используется. Таким образом, вы всегда знаете, на каком этапе сборки нужна та или иная зависимость. Основные области видимости:

  • Компиляция: Это область по умолчанию, которая применяется, если область не указана явно. Зависимости с такой областью доступны на всех фазах сборки и включаются в финальный пакет.
  • Предоставлено: Зависимости с этой областью предоставляются средой выполнения. Они используются при компиляции, но не включаются в финальный пакет.
  • Время выполнения: Эти зависимости не нужны при компиляции, но требуются во время выполнения. Они включаются в runtime classpath.
  • Тест: Эти зависимости используются только при компиляции и запуске тестов. В runtime и финальный пакет они не включаются.
  • Система: Область system аналогична provided, но в этом случае вы сами указываете JAR-файл, который будет использоваться Maven. Этот JAR должен находиться по указанному системному пути.

Транзитивные зависимости

Одна из ключевых возможностей Maven - управление транзитивными зависимостями. Когда проект объявляет зависимость, Maven автоматически подключает не только её саму, но и все её зависимости, зависимости этих зависимостей и так далее. Эта цепочка называется транзитивными зависимостями. Для наглядности: если ваш проект зависит от spring-boot-starter-web, Maven автоматически подключит все библиотеки, которые нужны spring-boot-starter-web, в том числе Spring Core, Spring MVC и Jackson.

Теперь, когда вы разобрались с теорией управления зависимостями в Maven, посмотрим, как это работает на практике:

mvn dependency:resolve

Эта команда разрешает и отображает все зависимости, необходимые для вашего проекта. С её помощью можно посмотреть, какие библиотеки использует проект, и убедиться, что всё в порядке.

mvn dependency:tree

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

mvn dependency:analyze

Эта команда анализирует зависимости проекта и находит неиспользуемые артефакты. Она помогает очистить проект и избавиться от лишнего.

Инструменты управления зависимостями в Maven упрощают процесс разработки, помогают избежать типичных ошибок и поддерживать проект в чистоте и порядке.

Исполнение

Выполнение задач в Maven - это запуск конкретных целей (goals) в рамках проекта. Задачи могут быть разными: от запуска программ Java до выполнения внешних скриптов и команд. Maven предоставляет мощные плагины, которые делают этот процесс удобным. Это ещё одна возможность Maven, которая делает его отличным инструментом для автоматизации различных частей рабочего процесса. Рассмотрим основные команды выполнения в Maven:

mvn exec:java

Эта команда запускает класс Java в вашем проекте. Она удобна для запуска main-классов или тестирования отдельных программ Java без предварительной упаковки.

mvn exec:exec

Эта команда позволяет запускать любую внешнюю программу или скрипт из среды Maven. Её можно использовать для запуска shell-скриптов, внешних инструментов или других программ, входящих в процесс сборки.

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

Управление серверами и контейнерами

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

mvn tomcat7:run

Эта команда запускает ваше веб-приложение с помощью Apache Tomcat. Это удобно для локальной разработки и тестирования: вы быстро разворачиваете и проверяете веб-приложение, не настраивая полноценное серверное окружение.

mvn jetty:run

Эта команда запускает ваше веб-приложение с использованием популярного веб-сервера Jetty. Как и Tomcat, Jetty хорошо подходит для разработки и тестирования благодаря небольшому весу и быстрому развёртыванию.

Как работает управление серверами и контейнерами

Maven использует такие плагины, как tomcat7-maven-plugin и jetty-maven-plugin для управления операциями с серверами. Эти плагины позволяют запускать, останавливать и настраивать серверы в рамках жизненного цикла сборки, что значительно упрощает разработку и тестирование веб-приложений в единообразной среде. Maven-профили дают возможность задавать конфигурации серверов для разных окружений: разработки, тестирования и продакшена. Кроме того, прямо в серверных плагинах можно настроить логирование и мониторинг, чтобы отслеживать активность серверов и быстро находить проблемы.

SCM (управление исходным кодом)

Управление исходным кодом (SCM) — неотъемлемая часть любого проекта. Командам разработчиков SCM необходим для отслеживания изменений в коде с течением времени. Maven предоставляет набор команд для работы с SCM-системами: Git, Subversion и другими. Эти команды автоматизируют такие задачи, как фиксация изменений, получение кода и обновление версий проекта. Ниже приведены основные SCM-команды Maven и их параметры.

mvn scm:checkin

Эта mvn-команда фиксирует изменения проекта в SCM. Она автоматизирует процесс коммита в репозиторий системы контроля версий, гарантируя, что последние правки сохранены и доступны всей команде.

mvn scm:checkout

Эта Maven-команда получает код проекта из SCM-репозитория и создаёт его локальную копию. Так вы всегда работаете с актуальной версией исходного кода.

mvn scm:update

Эта mvn-команда обновляет локальную рабочую копию проекта до последних изменений из SCM-репозитория. Она синхронизирует вашу кодовую базу с репозиторием, подтягивая все правки, внесённые другими участниками команды.

mvn scm:status

Эта mvn-команда показывает состояние локальной рабочей копии относительно SCM-репозитория: какие изменения были сделаны локально, но ещё не зафиксированы в репозитории.

mvn scm:tag

Эта команда создаёт тег в SCM-репозитории. Теги отмечают конкретные точки в истории проекта — например, релизы или важные этапы разработки.

Maven SCM-команды существенно упрощают управление исходным кодом проекта. Освоив их, вы повысите эффективность работы и улучшите взаимодействие внутри команды.

GPG (Страж конфиденциальности GNU)

GNU Privacy Guard (GPG) — криптографическое программное обеспечение для шифрования и подписи данных и сообщений. В контексте Maven GPG используется для подписи артефактов, что подтверждает их подлинность и целостность. Это особенно важно при публикации артефактов в публичных репозиториях: пользователи могут убедиться, что артефакты не были изменены. Maven предоставляет несколько команд для работы с GPG, упрощая подпись и публикацию артефактов проекта. Рассмотрим некоторые из них.

mvn gpg:sign

Эта Maven-команда подписывает артефакты проекта с помощью GPG. Подпись позволяет другим проверить подлинность артефактов и обеспечивает дополнительный уровень безопасности и доверия. Команда обычно используется в процессе сборки для подписи JAR-, WAR- и других артефактов перед публикацией.

mvn gpg:sign-and-deploy-file

Эта mvn-команда объединяет подпись и публикацию файла в один шаг. Используйте её, когда нужно подписать артефакт и сразу опубликовать его в репозитории. Это сокращает количество шагов и упрощает процесс.

Интеграция GPG-подписи в процесс сборки Maven повышает безопасность и надёжность вашего программного обеспечения, упрощая для пользователей проверку подлинности артефактов.

Управление релизами

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

mvn release:prepare

Эта mvn-команда подготавливает проект к релизу. Она проверяет отсутствие незафиксированных изменений, обновляет номера версий в файлах pom.xml , создаёт тег релиза в системе контроля версий (SCM) и переводит файлы pom.xml на следующую версию для разработки. Команда убеждается, что проект находится в стабильном состоянии и готов к выпуску.

mvn release:perform

Эта команда выполняет сам процесс релиза. Она получает код проекта из SCM по тегу, созданному командой release:prepare команда собирает проект и публикует артефакты в указанный репозиторий. Она гарантирует, что артефакты собраны из точного состояния кода на момент подготовки релиза.

mvn release:clean

Эта команда mvn удаляет все резервные файлы дескриптора релиза, которые создаются в процессе release:prepare процесса. Она очищает окружение и гарантирует отсутствие остаточных файлов от предыдущих попыток выпуска. Команда даёт вам чистое рабочее пространство и предотвращает потенциальные проблемы при следующих релизах.

Использование команд управления релизами упрощает процессы выпуска, повышает качество программного обеспечения и обеспечивает эффективное управление релизами.

Архетип

Если вы разработчик и хотите создавать структуры проектов на основе готовых шаблонов, стоит рассмотреть плагин Maven Archetype. Ниже мы разберём основные команды Maven, связанные с архетипами.

mvn archetype:generate

С помощью этой команды mvn можно создать новый проект из существующего шаблона, или «архетипа». Команда проведёт вас через выбор архетипа и настройку нового проекта, помогая сразу получить хорошо структурированный проект.

mvn archetype:catalog

Эта команда выводит список доступных архетипов, на основе которых можно генерировать новые проекты. Она полезна для изучения шаблонов, предоставляемых сообществом Maven, и позволяет определить, какой архетип лучше всего подходит для вашего проекта.

С помощью этих двух команд Maven можно быстро начать новый проект. Независимо от того, создаёте ли вы простое приложение Java или сложный корпоративный проект, архетипы Maven дают хорошую отправную точку.

Управление плагинами

Плагины Maven позволяют разработчикам расширять функциональность Maven и автоматизировать различные задачи в жизненном цикле сборки. Грамотное управление плагинами гарантирует, что проект остаётся поддерживаемым, а сборки воспроизводимыми. В этом разделе рассмотрены основные команды Maven для управления плагинами.

mvn plugin:download

Эта команда используется для загрузки конкретного плагина Maven из репозитория. Используйте её, когда нужно убедиться, что определённый плагин доступен в локальном репозитории до запуска других команд Maven, которые от него зависят.

mvn plugin:help

Эта команда maven отображает подробную информацию и документацию по конкретному плагину Maven. Используйте её, когда нужно разобраться в целях, параметрах и конфигурациях, доступных для плагина.

Эти команды управления плагинами Maven улучшают процесс сборки, автоматизируют рабочие процессы и поддерживают высокое качество и согласованность проекта.

Сборка и дистрибуция

Функциональность сборки и дистрибуции Maven позволяет разработчикам упаковывать проекты в различные форматы для распространения. С её помощью можно создавать исполняемые JAR-файлы, пакетные приложения или пользовательские дистрибутивы, включающие зависимости и другие ресурсы. Ниже рассмотрены ключевые команды Maven для сборки и дистрибуции.

mvn assembly:assembly

Эта команда создаёт сборку проекта. Сборка представляет собой дистрибутивный пакет, который может включать бинарные файлы, исходный код, зависимости и другие ресурсы. Команда использует Assembly Plugin для генерации таких пакетов на основе указанного дескриптора сборки.

mvn assembly:directory

Эта команда mvn создаёт структуру директорий сборки без фактического создания архивного файла. Она полезна для тестирования и проверки содержимого и структуры сборки перед упаковкой.

Умение работать с командами сборки и дистрибуции Maven значительно упрощает упаковку и распространение приложений.

Команды генерации сайта

Команды сайта Maven - отличный способ документировать проекты. Они генерируют полноценные сайты с документацией для ваших проектов. Ниже рассмотрены основные команды сайта и их функции.

mvn site

Команда mvn site генерирует документацию сайта проекта и включает сведения о проекте: сводку, отчёты о зависимостях, использование плагинов и многое другое.

mvn site:deploy

С помощью этой команды можно опубликовать сгенерированный сайт на удалённом сервере. Это удобно, когда нужно открыть доступ к документации более широкой аудитории - членам команды или публике.

mvn site:stage

Эта команда размещает сайт в локальной директории. Используйте её для предварительного просмотра сайта локально перед публикацией на удалённом сервере.

Аккуратная и структурированная документация крайне важна в разработке проекта. Команда maven site позволяет держать всё в порядке и улучшает коммуникацию внутри команды разработчиков.

Команды WAR и JAR

Как разработчик, вы наверняка знаете, насколько важна возможность упаковывать приложения в различные форматы. Maven позволяет упаковывать приложения Java в различные форматы, включая WAR (Web Application Archive) и JAR (Java Archive). Важность этих форматов упаковки становится очевидной, когда нужно развернуть приложения на серверах или распространить библиотеки. Ниже рассмотрены ключевые команды mvn для генерации WAR и JAR файлов.

mvn war:war

Эта команда компилирует проект и упаковывает его в WAR-файл. При запуске Maven сгенерирует WAR-файл в директории target вашего проекта.

mvn jar:jar

Эта команда компилирует проект и упаковывает его в JAR-файл в директории target вашего проекта.

Эти две команды используются для развёртывания и распространения приложений. С их помощью можно эффективно управлять приложениями Java и распространять их.

Отчётность

Любой программный проект требует подробной отчётности для отслеживания прогресса. Maven предоставляет мощные плагины и команды mvn для генерации отчётов различных типов. В этом разделе рассматриваются два плагина Maven для создания отчётов: Surefire и JaCoCo.

Плагин Surefire

Этот плагин используется для запуска модульных тестов в проекте Maven. Он генерирует подробные отчёты о выполненных тестах, чтобы вы могли убедиться, что код работает так, как ожидается.

mvn surefire-report:report

Эта команда генерирует отчёт о модульных тестах в удобном для чтения и анализа формате. Maven создаёт отчёт HTML в директории target/site вашего проекта. Отчёт содержит информацию о количестве запущенных, пройденных и упавших тестов, а также подробные трассировки стека для каждого сбоя.

Плагин JaCoCo

Этот плагин используется для измерения и отображения покрытия кода модульными тестами. С его помощью можно убедиться, что тесты охватывают всю кодовую базу.

mvn jacoco:report

Если вы хотите узнать, какие части кода протестированы, а какие нет, эта команда сформирует отчёт о покрытии кода. Команда создаёт отчёт HTML в директории target/site/jacoco который содержит подробные метрики покрытия для классов, методов и строк кода.

Эти два плагина позволяют отслеживать результаты тестов и покрытие кода, давая полезное представление о состоянии и качестве кодовой базы.

Настройка сборки

Maven позволяет гибко настраивать сборку под конкретные требования проекта. В этом разделе рассматривается использование профилей Maven и определений свойств для настройки сборки.

Профили Maven

С помощью профилей Maven можно задать различные конфигурации для проекта, которые активируются в зависимости от системных свойств, переменных окружения или пользовательских условий. Это позволяет настроить процесс сборки для разных окружений: разработки, тестирования и продакшена. Профили определяются в секции pom.xml в разделе <profiles> А параметр -p с указанием идентификатора профиля активирует нужный профиль.

Определение свойств

Свойства Maven позволяют задавать значения, которые можно переиспользовать во всём файле pom.xml . Свойства можно указывать в секции pom.xml, через командную строку или во внешних файлах свойств. Определите свойства в секции <properties> вашего файла pom.xml. После определения их можно использовать в любом месте файла pom.xml .

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

Заключение

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

Часто задаваемые вопросы

Для чего используется Maven?

Maven - это инструмент автоматизации сборки и управления проектами для Java. Он упрощает процесс сборки, управляет зависимостями проекта и обеспечивает стандартизированную структуру проекта. Кроме того, Maven поддерживает документирование, отчётность и распространение проектов.

Что такое POM в Maven?

Maven — это инструмент для автоматизации сборки и управления зависимостями в проектах Java. POM (Project Object Model) — XML-файл Maven, который содержит информацию о проекте и параметры конфигурации, используемые при сборке. В POM-файле описываются зависимости, плагины, цели сборки и другие настройки.

Поделиться

Другие статьи блога

Читать дальше.

Обзорное изображение Odoo: крупный заголовок слева, логотип Odoo справа, вокруг — панели интерфейса приложения на мягком фиолетовом фоне с облаками.
Веб и бизнес-приложения

Подробный обзор Odoo: подходит ли эта ERP-система для вашего бизнеса

Odoo — одна из наиболее популярных ERP-платформ среди растущих компаний, и причина проста: система обещает закрыть сразу много задач. Продажи, бухгалтерия, склад

Джим ШварцДжим Шварц 11 мин. чтения
Обзорное изображение для статьи об open-source альтернативах WordPress: цветной градиентный фон, монитор, редактор кода, размытый превью дашборда и крупный заголовок слева.
Веб и бизнес-приложения

Лучшие open-source альтернативы WordPress для разработчиков

WordPress по-прежнему востребован и отлично справляется с широким спектром задач. В его директории плагинов — более 62 000 решений, а в каталоге тем — свыше 14 000 бесплатных вариантов. Это

Джим ШварцДжим Шварц 14 мин. чтения
Обзорное изображение для сравнения Automad и WordPress: логотипы обеих платформ и заголовок с вопросом, какую CMS выбрать разработчику.
Веб и бизнес-приложения

Automad vs. WordPress: детальное сравнение двух CMS-платформ

Automad и WordPress решают одну задачу принципиально разными способами. Automad — это flat-file CMS с шаблонизатором: контент хранится в файлах, а не в базе данных. WordPress,

Джим ШварцДжим Шварц 9 мин. чтения

Готовы к деплою? От $2.48/мес.

Независимый облачный провайдер с 2008 года. AMD EPYC, NVMe, 40 Gbps. Возврат средств в течение 14 дней.