Maven в вопросах и ответах
На странице рассмотрены следующие вопросы использования фреймворка Maven :
Команда создания нового проекта
Для создания нового проекта используется плагин archetype с целью (goal) generate. В команде необходимо указать параметры GAV (groupId, artifactId, version) и тип артефакта archetypeArtifactId. Количество разнотипных артефактов у фреймворка maven огромно. Пример копирования наименований архитипов в файл и создания простого maven-проекта :
Структура файла описания проекта pom.xml
При описании проекта в файле pom.xml используются следующие теги и секции :
| project | элемент верхнего уровня, описание проекта; |
| GAV-параметры | параметры проекта; |
| url | интернет-страница проекта; |
| properties | секция свойств проекта; |
| repositories | секция репозиториев; |
| dependencies | секция определения зависимостей проекта; |
| build | описание сборки проекта |
Не все секции файла описания проекта pom.xml являются обязательными.
GAV-параметры и полное наименование артефакта
Параметры артефакта GAV включают groupId, artifactId, version. Полное имя артефакта (координата) представляет четыре слова, разделенные знаком двоеточия в следующем порядке groupId:artifactId:packaging:version.
Назначение SNAPSHOT
SNAPSHOT используется в определении версии артефакта и обозначает незавершенность её разработки. При каждой сборке проекта maven проверяет наличие обновленной версии snapshot артефакта в удалённом репозитории и подгружает последний.
Область действия зависимости scope
Область действия зависимости scope определяет этап жизненного цикла проекта, в котором эта зависимость будет использоваться. Maven использует 6 областей :
Использование внешних зависимостей
В качестве внешних зависимостей, как правило, используются собственные разработки, не размещаемые в центральном и локальном репозиториях. Внешние зависимости определяются в файле pom.xml также, как и другие зависимости – необходимо определить параметры GAV (groupId, artifactId, version) и область видимости scope как system. В теге необходимо указать абсолютный путь к файлу.
Транзитивные зависимости
Транзитивные зависимости позволяют избегать необходимости дополнительного указания в секции dependencies библиотек, которые требуются для самой зависимости, и maven включает их в проект автоматически. При разрешении конфликта версий используется принцип «ближайшей» зависимости, то есть выбирается зависимость, путь к которой через список зависимых проектов является наиболее коротким.
Команды «mvn depenency:list» и «mvn dependency:tree» позволяют вывести в консоль зависимости в виде списка или дерева соответственно.
Maven плагины
Maven использует два типа плагинов :
Плагины используются для :
Порядок выполнения maven команды
Как будет выполнена следующая команда
Аргументы clean и package являются фазами сборки проекта, «dependency:copy-dependencies» представляет собой задачу, которую выполняет плагин dependency для цели copy-dependencies (копирование зависимостей проекта в поддиректорию target/dependency).
Maven сначала выполнит фазу очистки clean, после этого будут скопированы зависимости «dependency:copy-dependencies», и в завершении выполнится сборка проекта.
Тестирование проекта
Для выполнения JUnit тестов проекта необходимо выполнить команду «mvn test». Чтобы выполнить определенный тест необходимо в командной строке указать полный путь [-Dtest=package.test-class] к конкретному тесту, например :
Для запуска сборки проекта с предварительной очисткой поддиректории «target» без выполнения тестов используйте следующую команду :
Примечание : помните, что запретив выполнение тестов в файле pom.xml, нельзя будет выполнять тесты с помощью Maven.
Maven репозитории
Под репозиторием (repository) понимается, как правило, внешние центральные хранилища артефактов, в которых собрано огромное количество наиболее популярных и востребованных библиотек, и локальное хранилище ($
Используемые в проекте внешние репозитории описываются в секции :
Предопределёные переменные в файле pom.xml
При описании проекта в файле pom.xml можно использовать переменные, на которые можно сослаться с помощью префиксов «project.» или «pom.» Наиболее часто используемые элементы :
Руководство по Maven. Жизненный цикл сборки.
Жизненный цикл сборки в Maven – это чётко определённая последовательность фаз во время выполнения которых должны быть достигнуты определённые цели.
Типичный жизненный цикл сборки Maven выглядит следующим образом:
| Фаза | Действия | Описание |
|---|---|---|
| prepare-resources | Копирование ресурсов | В этой фазе происходит копирование ресурсов, которое, также, может быть настроено. |
| compile | Компиляция | В этой фазе происходит компиляция исходного кода. |
| package | Создание пакета | В этой фазе, в зависимости от настроек создаётся архив JAR/WAR. Тип архива указывается в pom.xml файле. |
| install | Установка | В этой фазе происходит установка пакета в локальный/удалённый репозиторий maven. |
Каждая из этих фаз имеет фазы pre и post. Они могут быть использованы для регистрации задач, которые должны быть запущены перед и после указанной фазы.
Когда Maven начинает сборку проекта, он проходит через определённую последовательность фаз и выполняет определённые задачи, которые указаны в каждой из фаз. Maven имеет следующие 3 стандартных жизненных цикла:
Задача (goal) – это специальная задача, которая относится к сборке проекта и его управлению. Она может привязываться как к нескольким фазам, так и ни к одной. Задача, которая не привязана ни к одной фазе, может быть запущена вне фаз сборки с помощью прямого вызова.
Порядок выполнения зависит от порядка вызова целей и фаз.
Например, рассмотрим команду ниже. Аргументы clean и package являются фазами сборки до тех пор, пока dependency: copy-dependencies является задачей.
В этом случае, сначала будет выполнена фаза clean, после этого будет выполнена задача dependency: copy-dependencies. После чего будет выполнена фаза package.
Жизенный цикл Clean
Когда вы выполняете команду
Задача clean Maven (clean:clean) привязывается к фазе clean в жизненном цикле сборки. Эта задача удаляет ввод сборки путём удаления директории сборки. Таким образом, когда выполняется команда mvn clean, Maven удаляет директорию сборки.
Мы можем настроить это поведение указав эти задачи в любой из фаз сборки.
Рассмотрим пример, в котором мы привяжем задачу maven-antrun-plugin:run к фазам pre-clean, clean и post-clean.
После этого выполним в терминале следующую команду:
В результате мы получим следующий результат:
Мы также можем выполнить такие же действия для фаз pre-clean и clean.
Жизненный цикл Default (Build)
Это основной жизненный цикл Maven, который используется для сборки проектов. Он включает в себя 23 фазы:
| Фаза жизненного цикла | Описание |
|---|---|
| validate | Подтверждает, является ли проект корректным и вся ли необходимая информация доступа для завершения процесса сборки. |
| initialize | Инициализирует состояние сборки, например, различные настройки. |
| generate-sources | Включает любой исходный код в фазу компиляции. |
| process-sources | Обрабатывает исходный код (подготавливает). Например, фильтрует определённые значения. |
| generate-resources | Генерирует ресурсы, которые должны быть включены в пакет. |
| process-resources | Копирует и отправляет ресурсы в указанную директорию. Это фаза перед упаковкой. |
| compile | Комплирует исходный код проекта. |
| process-classes | Обработка файлов, полученных в результате компиляции. Например, оптимизация байт-кода Java классов. |
| generate-test-sources | Генерирует любые тестовые ресурсы, которые должны быть включены в фазу компиляции. |
| process-test-sources | Обрабатывает исходный код тестов. Например, фильтрует значения. |
| test-compile | Компилирует исходный код тестов в указанную директорию тестов. |
| process-test-classes | Обрабатывает файлы, полученные в результате компиляции исходного кода тестов. |
| test | Запускает тесты, используя приемлемый фреймворк юнит-тестирования (например, Junit). |
| prepare-package | Выполняет все необходимые операции для подготовки пакет, непосредственно перед упаковкой. |
| package | Преобразует скомпилированный код и пакет в дистрибутивный формат. Такие как JAR, WAR или EAR. |
| pre-integration-test | Выполняет необходимые действия перед выполнением интеграционных тестов. |
| integration-test | Обрабатывает и распаковывает пакет, если необходимо, в среду, где будут выполняться интеграционные тесты. |
| post-integration-test | Выполняет действия, необходимые после выполнения интеграционных тестов. Например, освобождение ресурсов. |
| verify | Выполняет любые проверки для подтверждения того, что пакет пригоден и отвечает критериям качества. |
| install | Устанавливает пакет в локальный репозиторий, который может быть использован как зависимость в других локальных проектах. |
| deploy | Копирует финальный пакет (архив) в удалённый репозиторий для, того, чтобы сделать его доступным другим разработчикам и проектам. |
Необходимо уточнить два момента:
В следующем примере, мы привязываем задачу maven-antrun-plugin:run к нескольким фазам жизненного цикла сборки. Это также позволяет нам вызывать текстовые сообщения, отображая фазу жизненного цикла.
После этого выполним следующую команду:
В результате мы получим, примерно, следующий результат:
Жизненный цикл Site
Плагин Maven – Site – используется для создания докладов, документации, развёртывания и т.д.
Он включает в себя такие фазы:
В примере ниже мы прикрепляем задачу maven-antrun-plugin:run ко всем фазам жизненного цикла Site. Это позволяет нам вызывать текстовые сообщения для отображения фаз жизненного цикла.
Теперь выполним команду Maven:
В результате мы получим, примерно, следующий результат:
В этом уроке мы изучили основы жизненного цикла сборки проектов в Maven.
В следующем уроке мы изучим профиль сборки.
Как ускорить сборку с Maven
Что делать, если сборка (build) с Maven проходит слишком медленно? Ведь когда сборка длится слишком долго, любой, даже самый терпеливый разработчик, может заскучать и отвлечься.
Для быстрого поиска в Google или для закладок, сразу предлагаю итоговое решение:
— для сборки проекта без тестов.
Эта история началась с того, что я выкачал довольно большой проект на Java из нашего корпоративного репозитория. Думаю, что многие, как и я, сразу собрали бы его командой:
, ну а многие командой:
Мой проект собрался за 25 минут, и каждый раз собирался так же долго, как и в первый раз.
package вместо install
Согласно жизненному циклу сборки проекта после фазы package, на которой мы получаем полноценный jar-файл, есть фаза verify, а затем install. Часто необходимо получить именно jar-файл, который нет необходимости помещать в локальный репозиторий, поэтому в данной ситуации я остановился на package и сэкономил немного времени.
Параллельная сборка
В первом случае вы указываете число потоков для использования Maven, а во втором — что необходимо использовать один поток на каждое ядро CPU.
Второй способ задания параметра, привязанный к количеству ядер, я и собираюсь использовать в своей итоговой команде.
Поэкспериментировав с количеством потоков на ядро, попробовав следующие варианты:
Инкрементальная сборка
Как мы обсуждали выше, проект чаще всего собирается командой:
Команда clean используется для очистки проекта, но так ли это нужно каждый раз при сборке? Нет, обычно мы хотим инкрементального обновления проекта, и Maven на это способен при помощи команды:
Maven собирает модуль и обновляет те модули, от которых зависит данный модуль, в случае если в них что-то поменялось.
Эта опция в разы ускоряет сборку проектов из многих модулей, в которых, как правило, вносятся точечные изменения в 1-2 модуля.
Оффлайновая сборка
Часто бывает так, что артефакты на внешних репозиториях обновляются не так уж и часто, особенно, когда это артефакты определённой версии, или эти артефакты должны поддерживаться вашими усилиями (- Добро пожаловать в новый проект!). Довольно логично в такой ситуации сообщить Maven, что не нужно каждый раз заново скачивать их из репозиториев:
Мы для лаконичности остановимся на первом варианте.
Пропуск тестов
Но при этом можно также пропустить компиляцию тестов, если выполнить команду в следующем виде:
Подведём итоги
Итак, ещё раз команда, которая получилась у нас для ускорения сборки с Maven:
Результат, показанный на собираемом мной проекте, радует: сборка вместо 25 минут стала проходить за 30 секунд.
Авторы некоторых других статей по оптимизации скорости сборки с Maven также рекомендуют использовать параметры оптимизации запуска компилятора:
— но, во-первых, я не почувствовал какого-то реального ускорения сборки, по всей видимости, из-за того, что я и так пользовался инкрементальной сборкой и процесс компиляции отнимал в этом случае не так много времени, а во-вторых, встречается достаточное количество упоминаний того, что эти параметры могут вызвать ошибки OutOfMemory и прочие проблемы.
Надеюсь, что в комментариях вы также поделитесь статистикой по ускорению сборки ваших проектов!
Живой сайт об актуальных проектах
User Tools
Site Tools
Sidebar
Table of Contents
Maven FAQ
Основные ссылки по Maven:
Что такое сборка проекта, автоматизация сборки?
Что такое Maven? Как он работает?
Если собирать большие проекты с командной строки, то команда для сборки будет очень длинной, поэтому её иногда записывают в bat/sh скрипт. Но такие скрипты зависят от платформы. Для того чтобы избавиться от этой зависимости и упростить написание скрипта, используют инструменты для сборки проекта.
Maven обеспечивает декларативную, а не императивную сборку проекта. То есть, в файлах проекта pom.xml содержится его описание, а не отдельные команды. Все задачи по обработке файлов в Maven выполняется через плагины.
Какие преимущества Maven?
Основные преимущества Maven:
Какие недостатки Maven?
Какими аспектами управляет Maven?
Вот основные аспекты, которыми позволяет управлять Maven:
Как узнать, какую версию Maven вы используете?
Версию можно узнать с помощью следующей команды:
Для чего был создан Maven?
Основной целью Maven является предоставление разработчику:
Структура и содержание проекта Maven указывается в специальном xml-файле, который назывется Project Object Model (POM), который является базовым модулем всей системы.
Какая структура каталогов в Maven?
| src/main/java | Application/Library sources | исходный код приложения или библиотеки |
| src/main/resources | Application/Library resources | ресурсы приложения или библиотеки |
| src/main/filters | Resource filter files | файлы с параметрами фильтрации ресурсов |
| src/main/webapp | Web application sources | исходный код веб-приложения |
| src/test/java | Test sources | исходный код тестов (юнит-тестов) |
| src/test/resources | Test resources | ресурсы юнит тестов |
| src/test/filters | Test resource filter files | файлы с параметрами фильтрации ресурсов для тестов |
| src/it | Integration Tests (primarily for plugins) | интеграционные тесты (в основном для плагинов) |
| src/assembly | Assembly descriptors | дескрипторы сборки |
| src/site | Site | вебсайт приложения (документация) |
| LICENSE.txt | Project’s license | лицензионное соглашение проекта |
| NOTICE.txt | Notices and attributions required by libraries that the project depends on | замечания и необходимые атрибуты библиотек, от зависит проект |
| README.txt | Project’s readme | краткое описание проекта |
Где хранятся файлы классов при компиляции проекта Maven?
Что такое pom.xml?
Во время выполнения задач, Maven ищет файл pom.xml в базовой директории проекта. Он читает его и получает необходимую информацию, после чего выполняет задачи.
содержит ссылку на схему XML, которая облегчает редактирование и проверку pom.xml :
Внутри тега project содержится основная и обязательная информация о проекте.
Какую информацию содержит pom.xml?
Среди информации которую содержит pom.xml, мы можем выделить следующие блоки:
Что такое супер POM?
Какие элементы необходимы для минимального POM?
Что такое зависимости в Maven?
Что такое артефакт в Maven?
Что такое плагин в Maven?
Что такое задача в Maven?
Что такое архетип в Maven?
Что такое репозитарий в Maven?
Какие типы репозитария существуют в Maven?
В Maven существуют три типа репозитариев:
Какая команда устанавливает JAR-файл в локальное хранилище (репозитарий)?
Какой порядок поиска зависимостей Maven?
Когда мы выполняем собрку проекта в Maven, автоматически начинается поиск необходимых зависимостей в следующем порядке:
Какие два файла настройки есть в Maven, как они называются и где расположены?
Что такое жизненный цикл сборки в Maven?
Назовите основные фазы жизненного цикла сборки Maven?
Когда Maven начинает сборку проекта, он проходит через определённую последовательность фаз сборки, и выполняет определенные задачи, которые указаны в каждой из фаз.
В Maven есть следующие три стандартных жизненных цикла:
Что делает команда mvn site?
создает веб-сайт проекта.
Что делает команда mvn clean?
эта команда очищает целевую директорию от созданных в процессе сборки файлов.
Из каких фаз состоит жизненный цикл сборки Clean?
Жизненный цикл сборки Clean состоит из следующих этапов:
Из каких фаз состоит жизненный цикл сборки Default (Build)?
Здесь также необходимо уточнить два момента:
Из каких фаз состоит жизненный цикл сборки Site?
Жизненный цикл сборки Site состоит из следующих этапов:
Что сделает команда «mvn clean dependency:copy-dependencies package»?
Порядок выполнения зависит от порядка вызова целей и фаз. Рассмотрим данную команду:
Аргументы clean и package являются фазами сборки, в то время как “ dependency:copy-dependencies ” является задачей.
Что такое профиль сборки (Build Profile)?
Используя профиль сборки Maven, мы можем настраивать сборку для различных окружений, таких как Development или Production.
Профили настраиваются в файле pom.xml с помощью элементов activeProfiles / profiles и запускаются различными методами.
Какие типы профилей сборки (Build Profiles) вы знаете?
В Maven существует три основных типа профилей сборки :
Как вы можете активировать профили сборки?
Профиль сборки Maven может быть активирован различными способами:
Для чего используются Maven плагины?
Maven плагины используются для:
Какие типы плагинов существуют в Maven?
В Maven существует два типа плагинов:
Когда Maven использует внешние зависимости?
Если необходимые файлы не найдены ни в центральном, ни на удалённом репозитарии, тогда для решения этой проблемы используются внешние зависимости.
Что нужно определить для внешней зависимости?
Внешние зависимости могут быть сконфигурированы в файле pom.xml таким же образом, как и другие зависимости, для этого нужно:
Какая команда создает новый проект на основе архетипа?
Переходим в нужную нам директорию и выполняем в терминале следющую команду:
Что такое SNAPSHOT в Maven?
В чем разница между snapshot и версией?
В случае со snapshot, Maven автоматически будет подтягивать крайний snapshot ( data-service:1.0-SNAPSHOT ) каждый раз, когда будет выполнятся сборка проекта.
Что такое транзитивная зависимость в Maven?
Как Maven определяет, какую версию зависимостей использовать, когда встречается множественный вариант выбора?
Что такое область видимости зависимостей (dependency scope)? Назовите значения dependency scope.
Существуют следующие области видимости зависимостей :
Какой минимальный набор информации нужен для составления ссылки зависимостей в разделе dependencyManagement?
Как сослаться на свойство(property) определенное в файле pom.xml?
Для чего нужен элемент в POM файле?
Элемент содержит информацию, необходимую для выполнения плагина.
Каким образом можно исключить зависимость в Maven?
Что является полным именем артефакта?
Если вы не определяете никакой информации, откуда ваш POM унаследует её?
Все POM-ы наследуются от родителя, несмотря на то, определен ли он явно или нет. Это базовый POM известный как “супер POM”, он содержит значения, которые наследуются по умолчанию.
При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. Можете ли вы собрать проект без интернета?
Да, можете, если в вашем локальном репозитарии есть все необходимые для сборки артефакты.
Если при сборке проекта в тестах произошла ошибка, как собрать проект без запуска тестов?
Как запустить только один тест?
Фреймворк Apache Maven
Apache Maven предназначен для автоматизации процесса сборки проектов на основе описания их структуры в файле на языке POM (Project Object Model), который является подмножеством формата XML. maven позволяет выполнять компиляцию кодов, создавать дистрибутив программы, архивные файлы jar/war и генерировать документацию. Простые проекты maven может собрать в командной строке. Название программы maven вышло из языка идиш, смысл которого можно выразить как «собиратель знания».
В отличие от ant с императивной сборкой проекта, maven обеспечивает декларативную сборку проекта. То есть, в файле описания проекта содержатся не отдельные команды выполнения, а спецификация проекта. Все задачи по обработке файлов maven выполняет посредством их обработки последовательностью встроенных и внешних плагинов.
Инсталляция maven
Последнюю версию maven можно скачать в виде zip-архива со страницы загрузки на официальном сайте. После этого необходимо выполнить несколько шагов :
Чтобы убедиться, что maven установлен, необходимо в командной строке ввести следующую команду :
Должна появиться информация о версиях maven, jre и операционной системе типа :
Одной из привлекательных особенностей maven‘a является справка online, работоспособность которой можно проверить после инсталляции. К примеру справку по фазе компиляции можно получить следующей командой :
В результате Вы увидите следующую справочную информацию :
Репозитории проекта, repositories
Под репозиторием (repository) понимается, как правило, внешний центральный репозиторий, в котором собрано огромное количество наиболее популярных и востребованных библиотек, и локальный репозиторий, в котором хранятся копии используемых ранее библиотек.
Дополнительные репозитории, необходимые для сборки проекта, перечисляются в секции проектного файла pom.xml :
Для добавления, к примеру, библиотеки carousel-lib.jar в локальный репозиторий можно использовать команду mvn install (команда должна быть однострочной) :
В локальном репозитории «.m2» maven создаст директорию ru/carousel, в которой разместит данную библиотеку и создаст к ней описание в виде pom.xml.
Репозиторий можно также разместить внутри проекта. Описания процесса создания и размещения репозитория внутри проекта с примером можно прочитать здесь.
Собстенные наработки можно подключить как системную зависимость.
Терминология maven
В maven используется свой набор терминов и понятий. Ключевым понятием maven является артефакт (artifact) — это, по сути, любая библиотека, хранящаяся в репозитории, к которой можно отнести зависимость или плагин.
Зависимости (dependencies) представляют собой библиотеки, которые непосредственно используются в проекте для компиляции или тестирования кода.
При сборке проекта или для каких-то других целей (deploy, создание файлов проекта для Eclipse и др.) maven использует плагины (plugin).
Архетипы maven
Количество архетипов у maven‘a огромно, «на разный вкус». Как правильно выбрать нужный, чтобы создать архитектуру будущего проекта? Просматривать в консоли не очень удобно, тем более что их количество переваливает за 1500 (к примеру для версии maven 3.3.9 на моем компьютере их 1665). Поэтому можно скачать их в отдельный файл, а потом со всем этим хозяйством разбираться. Для этого необходимо выполнить следующую команду :
В результате в файле archetypes.txt можно увидеть, что-то подобное
При выполнении данной команды maven, после скачивания информации в файл, ожидает поступления команды пользователя. Т.е., находится в ожидании интерактивного ввода команд по созданию проекта определенного типа. Если файл уже создан, то прервите выполнение команды двойным нажатием клавишам Ctrl+C.
Для создания простенького maven проекта «carousel» (карусель) необходимо выполнить следующую команду :
Архитектура простого maven проекта
Следующая структура показывает директории простого maven проекта.
Проектный файл pom.xml располагается в корне каталога.
В зависимости от типа приложения (консольное, с интерфейсом, web, gwt и т.д.) структура может отличаться. В директории target maven собирает проект (jar/war).
На официальном сайте Apache Maven Project можно получить дополнительную информацию об архетипах (Introduction to Archetypes).
Жизненный цикл maven проекта
Жизненный цикл maven проекта – это чётко определённая последовательность фаз. Когда maven начинает сборку проекта, он проходит через определённую последовательность фаз, выполняя задачи, указанные в каждой из фаз. Maven имеет 3 стандартных жизненных цикла :
Каждый из этих циклов имеет фазы pre и post. Они могут быть использованы для регистрации задач, которые должны быть запущены перед и после указанной фазы.
Фазы жизненного цикла clean
Фазы жизненного цикла default
Фазы жизненного цикла site
Стандартные жизненные циклы могут быть дополнены функционалом с помощью maven-плагинов. Плагины позволяют вставлять в стандартный цикл новые шаги (например, распределение на сервер приложений) или расширять существующие шаги.
Порядок выполнения команд maven проекта зависит от порядка вызова целей и фаз. Следующая команда
выполнит фазу clean, после этого будет выполнена задача dependency:copy-dependencies, после чего будет выполнена фаза package. Аргументы clean и package являются фазами сборки, dependency:copy-dependencies является задачей.
Зависимости, dependency
Зависимость, эта связь, которая говорит, что для некоторых фаз жизненного цикла maven проекта, требуются некоторые артефакты. Зависимости проекта описываются в секции файла pom.xml. Для каждого используемого в проекте артефакта необходимо указать GAV (groupId, artifactId, version), где
Как правило информации GAV достаточно maven‘у, для поиска указанного артефакта в репозиториях. Пример описания зависимости библиотеки JDBC для работы с БД Oracle.
Более подробная информация о зависимостях и областях их действия, а также о способе построения транзитивных зависимостей в виде дерева представлена на странице dependency в maven-проекте.
Плагины, plugins
Maven базируется на plugin-архитектуре, которая позволяет использовать плагины для различных задач (test, compile, build, deploy и т.п). Иными словами, maven запускает определенные плагины, которые выполняют всю работу. То есть, если мы хотим научить maven особенным сборкам проекта, то необходимо добавить в pom.xml указание на запуск нужного плагина в нужную фазу и с нужными параметрами. Это возможно за счет того, что информация поступает плагину через стандартный вход, а результаты пишутся в его стандартный выход.
Количество доступных плагинов очень велико и включает разнотипные плагины, позволяющие непосредственно из maven запускать web-приложение для тестирования его в браузере, генерировать Web Services. Главной задачей разработчика в этой ситуации является найти и применить наиболее подходящий набор плагинов.
Целью (goal) выполнения данного плагина является проверка «check». Можно запустить в более краткой форме :
Объявление плагина в проекте похоже на объявление зависимости. Плагины также идентифицируется с помощью GAV (groupId, artifactId, version). Например:
Объявление плагина в pom.xml позволяет зафиксировать версию плагина, задать ему необходимые параметры, определить конфигурационные параметры, привязать к фазам.
Что касается списка конфигурационных переменных плагина, то его легко можно найти на сайте maven. К примеру, для maven-compiler-plugin, на странице Apache Maven Project можно увидеть перечень всех переменных, управляющих плагином.
Разные плагины вызываются maven’ом на разных стадиях жизненного цикла. Так проект, формирующий настольное java-приложение с использованием библиотек swing или swt, имеет стадии жизненного цикла отличные от тех, что характерны для разработке enterprise application (ear). Еак например, когда выполняется команда «mvn test», инициируeтся целый набор шагов в жизненном цикле проекта: «process-resources”, «compile», «process-classes», «process-test-resources», «test-compile», «test». Упоминания этих фаз отражаются в выводимых maven-ом сообщениях :
В каждой фазе жизненного цикла проекта вызывается определенный плагин (jar-библиотека), который включает некоторое количество целей (goal). Например, плагин «maven-compiler-plugin» содержит две цели: «compiler:compile» для компиляции основного исходного кода проекта и «compiler:testCompile» для компиляции тестов. Формально, список фаз можно изменять, хотя такая ситуация случается крайне редко.
В проектном файле pom.xml можно настроить для каждого из плагинов жизненного цикла набор конфигурационных переменных, например :
В случае необходимости выполнения нестандартных действий в определенной фазе, например, на стадии генерации исходников «generate-sources», можно добавить вызов соответствующего плагина в файле pom.xml :
Самое важное в данном случае – это определить для плагина наименование фазы «execution/phase», в которую нужно встроить вызов цели плагина «goal». Фаза «generate-sources» располагается перед вызовом фазы compile и очень удобна для генерирования части исходных кодов проекта.
Описание различных плагинов представлено на странице Maven плагины для сборки проекта.
Основные исполняемые цели, goal
Использование maven часто сводится к выполнению одной из команды следующего набора, которые можно назвать целями (по аналогии с другими системами сборки типа ant, make) :
В общем случае для выполнения команды maven необходимо выполнить следующий код : «mvn цель». В качестве параметров указываются не только имена фаз, но и имена и цели плагинов в формате «mvn плагин:цель». Например, вызов фазы цикла «mvn clean» эквивалентен вызову плагина «mvn clean:clean».
Секция свойств maven проекта, properties
Отдельные настройки проекта можно определить в переменных. Это может быть связанно, к примеру, с тем, что требуется использовать семейство библиотек определенной версии. Для этого в проектном файле используется секция
Кодировка maven проекта
При выполнении отдельных команд maven, связанных с копированием ресурсов или компиляцией, могут «выплыть» предупреждения о кодировке :
Чтобы обойти эти сообщения, необходимо включить в секцию
следующий код с указанием требуемой кодировки :
Для просмотра свойств проекта можно использовать плагин «maven-echo-plugin» :
Проектный файл, pom.xml
Структура проекта описывается в файле pom.xml, который должен находиться в корневой папке проекта. Содержимое проектного файла имеет следующий вид :
Секция build
Секция также не является обязательной, т. к. существует значение по умолчанию. Данная секция содержит информацию по самой сборке, т.е. где находятся исходные файлы, файлы ресурсов, какие плагины используются.
Тестирование проекта
Maven позволяет запускать JUnit case приложения на тестирование. Для этого следут выполнить команду «mvn test». Отдельные команды maven, например «mvn verify», автоматически запускают тесты приложения. Тестирование можно запретить на уровне выполнения команды или в секции «properties» файла pom.xml. Подробнее информация о тестировании с использованием maven представлена здесь.
Предопределёные переменные maven
При описании проекта в pom-файле можно использовать предопределенные переменные. Их можно условно разделить на несколько групп :




