Apache Maven — основы
После публикации топика о Maven в комментариях возникли вопросы о том, как начать с ним работать, с чего начать, как составлять файлы pom.xml, откуда брать плагины и т.п. Данный топик будет своего рода getting started или f.a.q.
Терминология
Как в любой системе, в Maven, есть свой набор терминов и понятий.
Вся структура проекта описывается в файле pom.xml (POM – Project Object Model), который должен находиться в корневой папке проекта. Ключевым понятием Maven является артефакт — это, по сути, любая библиотека, хранящаяся в репозитории. Это может быть какая-то зависимость или плагин.
Зависимости — это те библиотеки, которые непосредственно используются в вашем проекте для компиляции кода или его тестирования.
Плагины же используются самим Maven’ом при сборке проекта или для каких-то других целей (деплоймент, создание файлов проекта для Eclipse и др.).
В самом начале работы с Maven, пользователь непременно столкнется с таким понятием как архетип. Архетип — это некая стандартная компоновка файлов и каталогов в проектах различного рода (веб, swing-проекты и прочие). Другими словами, Maven знает, как обычно строятся проекты и в соответствии с архетипом создает структуру каталогов.
Как правило, название артефакта состоит из названия группы, собственного названия и версии. К примеру Spring будет иметь вот такое название в среде Maven: org.springframework.spring:2.5.5. Последний домен означает всегда artifactId, все, что перед ним – groupId – хорошо это запомните!
На жизненном цикле останавливаться не буду, так как он хорошо описан в вышеобозначенной статье. А теперь перейдем к практике.
Установка Maven
Последнюю версию всегда можно скачать на странице загрузки на официальном сайте. Просто распаковываем архив в любую директорию. Далее необходимо создать переменную в Path, в которой необходимо указать путь к Maven. Заходим в Win + Pause – Дополнительно – Переменные среды – в верхнем окошке нажимаем Создать, вводим имя M2_HOME и значение допустим “C:\apache-maven-2.2.1”. Далее там же создаем еще одну переменную M2 со значением %M2_HOME%\bin. Так же убеждаемся, что есть переменная JAVA_HOME с путем к JDK. Ее значение должно быть примерно таким «c:\Program Files\Java\jdk1.6.0_10\». И наконец в том же окошке создаем/модифицируем переменную Path, в нее необходимо просто написать %M2%, чтобы наша папочка с исполняемым файлом Maven была видна из командной строки. Теперь необходимо проверить работоспособность нашей установки. Для этого заходим в командную строку и вводим команду
Должна появиться информация о версиях Maven, jre и операционной системе, что-то вроде:
Maven создаст вам локальный репозиторий в вашей личной папке, например в каталоге C:\Documents and Settings\username\.m2\repository
Все, Maven готов к работе, можно приступать к созданию приложения.
Создание приложения из архетипа
На сайте Maven перечислены наиболее популярные архетипы для приложений, но вы можете легко создать свой или найти более специфичный например здесь.
Итак, допустим нас интересует веб-приложение – находим подходящий архетип, называется он maven-archetype-webapp. В командной строке, в необходимом каталоге выполняем команду Maven:
Теперь мы можем лицезреть довольно наглядную структуру каталогов с говорящими названиями java – здесь будут ваши классы, webapp – здесь размещаются странички веб-приложения, resources – различного рода ресурсы в classpath (файлы конфигурации, например), test – юнит-тесты, соответственно и т.п.
Сборка проекта
Здесь все просто – выполняем команду
в корневом каталоге приложения, там, где находится файл pom.xml. Первая команда скомпилирует ваш проект и поместит его в папку target, а вторая еще и положит его к вам в локальный репозиторий.
Есть полезная функция, наподобие конвеера, то есть можно написать
и Maven сначала очистит папку target проекта, потом соберет его и положит в репозиторий.
Минимальный набор действий для работы Maven мы изучили, теперь переходим к кастомизации и добавлению зависимостей проекта.
Зависимости и репозитории
Как правило, большинство популярных библиотек находятся в центральном репозитории, поэтому их можно прописывать сразу в раздел dependencies вашего pom-файла. Например чтобы подключить Spring Framework необходимо определить следующую зависимость:
Версию хотя и можно не указывать и тогда Maven возьмет последний вариант, но я вам лично советую это делать, потому как у нас неоднократно бывали случаи, что проект просто в один момент переставал собираться или начинал падать в совершенно неожиданных и хорошо оттестированных местах, хотя вроде бы никто ничего не менял.
Специфические вещи обычно не находятся в центральном репозитории и тогда вам придется указать репозиторий производителя вручную. Для примера добавим зависимость JSF-фреймворка ajax-компонентов JBoss RichFaces.
С зависимостями все просто:
А вот репозиторий JBoss теперь необходимо прописать ручками либо в файле settings.xml, который лежит в корне вашего локального репозитория, либо в самом файле pom.xml, в зависимости от того, нужен ли данный репозиторий во всех проектах, либо в каком-то одном конкретном, соответственно:
Как правило на сайтах крупных проектов пишут всю информацию, необходимую для встраивания их библиотеки в проект на основе Maven, но бывают случаи, когда артефакт приходится искать очень и очень долго. Здесь нам очень сильно может помочь MVNrepository.com — он вам всегда подскажет где может находиться искомая библиотечка. Но если уж и там не нашлось, то из собственного опыта могу посоветовать гуглить «<название библиотеки> pom.xml». Бывает так, что проекты уже давно закрыты и в репозитории не положены потому что разработчики уже не заботятся об их распространении. Тогда остается один единственный способ – добавить файл в репозиторий вручную командой:
Последний параметр чаще всего имеет значение jar.
Плагины
Так как плагины являются такими же артефактами, как и зависимости, то они описываются практически так же. Вместо раздела dependencies – plugins, dependency – plugin, repositories – pluginRepositories, repository – pluginRepository.
Плагинами Maven делает все, даже непосредственно то, для чего он затевался – сборку проекта, только этот плагин необязательно указывать в свойствах проекта, если вы не хотите добавить какие-то фичи.
Посмотрим как настроить плагин для создания проекта для Eclipse с использованием WTP ver. 2.0. В раздел plugins нашего pom.xml прописываем следующий плагин:
Теперь идем опять таки в командную строку и выполняем команду
Ждем пока Maven найдет все библиотеки в репозитории или скачает их и вуаля – теперь наш Maven-проект можно открыть как проект eclipse. При этом библиотеки никуда не копируются как при классическом подходе, а остаются в репозитории и Eclipse делает на них ссылку через свои переменные.
Единого списка всех плагинов естественно не существует, на официальном сайте только есть поддерживаемые плагины непосредственно разработчиками Maven. Однако хотелось бы отметить, что названия плагинов довольно прямолинейны и сделав поиск по ключевым словам «maven tomcat plugin» вы скорее всего обнаружите первой ссылкой плагин для деплоймента проекта в Tomcat.
Собственный репозиторий
К сожалению сам не имею большого опыта настройки репозитория, но могу посоветовать как наиболее простой и распространенный Nexus. За дополнительной информацией следует обратиться на сайт данного проекта.
Однако нельзя оставить без внимания и достойных конкурентов в лице Artifactory и Archiva.
Все, что вы хотели знать о Maven — «Java-проект от А до Я»

Всем привет, дорогие друзья. Хочу сразу извиниться: помнится, я обещал, что буду писать по статье раз в неделю. Не получилось. Просто руки не дошли до того, чтобы сесть и нормально написать, а делать так-сяк не хочу. Ныть о причинах не буду, так как мне оно не нужно, и вам уж точно не интересно. Проект не мертв, он был в стазисе 🙂 Мы продолжаем! И сегодняшний материал посвящен Мавену.
Maven в Java подробно
Maven – мощный инструмент сборки для Java-проектов. Это инструмент управления и автоматизации. Он в основном написан на языке Java и используется для создания и управления проектами, написанными на C #, Ruby, Scala и других языках.
Что такое Maven?
Maven – действительно мощный инструмент управления проектами, который используется для создания и управления любым проектом, связанным с Java. Maven помогает облегчить работу Java-разработчика. Он способен обрабатывать сборку проекта, отчеты и документацию.

Здесь есть определенные термины, которые могут быть для вас новыми.
- Файлы POM : для настройки Maven вам необходимо использовать объектную модель проекта (POM), которая хранится в файле pom.xml. POM включает параметр конфигурации, связанный с Maven. У него также есть цели и плагины. В процессе выполнения Maven считывает цель, ищет POM в каталоге и получает необходимую информацию.
- Жизненные циклы, фазы и цели сборки .
- Жизненный цикл сборки – это четко определенная последовательность фаз. Он определяет порядок, в котором цели должны быть выполнены.
- Каждая фаза построения состоит из последовательности целей. Если выполняется один жизненный цикл, выполняются все фазы сборки в этом жизненном цикле.
- Если выполняется этап сборки, выполняются все этапы сборки до него в заранее определенной последовательности этапов сборки.
- локальные;
- центральные;
- удаленные.
Как установить?
Вам необходимо выполнить следующие простые шаги:
- В вашей системе должна быть установлена Java.
- Задайте переменную среды Java.
- Загрузите Maven.
- Теперь вам нужно распаковать zip-архив Maven в желаемое место.
- Добавьте каталог bin созданного вами каталога, то есть apache-maven-3.5.3 (независимо от установленной вами версии), в переменную среды PATH и системную переменную.
- Теперь откройте cmd и запустите команду mvn -v
- Если на вашем экране отображается снимок экрана, показанный ниже, значит, процесс установки завершен.
Файл Maven pom.xml
POM означает объектную модель проекта. Файл pom.xml содержит информацию о проекте и информацию о конфигурации для сборки проекта. Он содержит зависимости, каталог сборки, каталог с исходным кодом, каталог с исходным кодом теста, плагин и т. д. Maven просматривает файл pom.xml, а затем выполняет цель. Для создания простого файла pom.xml вам потребуются следующие элементы:
- project: Корневой элемент файла pom.xml.
- groupId: вложенный элемент проекта. Он описывает идентификатор проекта.
- modelVersion: вложенный элемент проекта. Он сообщает вам версию модели.
- artifactId: вложенный элемент проекта. В нем указывается идентификатор проекта. Артефакт либо создается, либо используется проектом. Примеры артефактов: JAR, исходные и двоичные дистрибутивы, а также WAR.
- Version: Подэлемент проекта. Он сообщает вам версию артефакта в данной группе.
Ниже показан образец файла pom.xml:
В файле pom.xml есть некоторые дополнительные элементы:
- Packaging: определяет тип упаковки, такой как war, jar и т. д.
- Scope: определяет область для проекта maven.
- Url: указывает URL-адрес проекта.
- Name: определяет имя проекта maven.
- Dependency: определяет зависимость. Он используется внутри зависимостей.
Пример кода файла pom.xml, показывающий дополнительные элементы:
Репозиторий
Репозиторий – это просто каталог на вашем компьютере. Здесь хранятся jar-файлы проекта, плагины или любые другие материалы, относящиеся к проекту. Всякий раз, когда нужно искать какую-либо зависимость, это делается в репозиториях. Maven инициализирует поиск из локального репозитория, затем из центрального и, наконец, из удаленного.
Локальный
Локальный репозиторий Maven – это папка на вашем компьютере, где хранятся все связанные с проектом элементы. Как только сборка Maven выполняется, Maven автоматически загружает все jar-файлы зависимостей в локальный репозиторий. По умолчанию локальным репозиторием maven является каталог user_home / m2.
Центральный
Если какая-либо зависимость не найдена в локальном репозитории, Maven проходит через центральный репозиторий. Затем Maven загружает эти зависимости в ваш локальный репозиторий.
Удаленный
Когда Maven хочет загрузить зависимость, она переходит в удаленный репозиторий. Удаленный репозиторий – это репозиторий на веб-сервере, который широко используется для размещения внутренних проектов организации.
MAVEN¶
Сборка (англ. assembly) — двоичный файл, содержащий исполняемый код программы или другой, подготовленный для использования информационный продукт.
Автоматизация сборки — этап написания скриптов или автоматизация широкого спектра задач применительно к ПО, применяемому разработчиками в их повседневной деятельности, включая такие действия, как:- Компиляция исходного кода в бинарный код
- Сборка бинарного кода
- Выполнение тестов
- Разворачивание программы на производственной платформе
- Написание сопроводительной документации или описание изменений новой версии
Что такое Maven? Как он работает?¶
Apache Maven — это фреймворк для автоматизации сборки проектов, компиляции, создания jar, создания дистрибутива программы, генерации документации. Если собирать большие проекты с командной строки, то команда для сборки будет очень длинной, поэтому её иногда записывают в bat/sh скрипт. Но такие скрипты зависят от платформы. Для того чтобы избавиться от этой зависимостии и упростить написание скрипта используют инструменты для сборки проекта. Maven, обеспечивает декларативную, а не императивную сборку проекта. То есть, в файлах проекта pom.xml содержится его декларативное описание, а не отдельные команды. Все задачи по обработке файлов Maven выполняется через плагины.
Какие преимущества Maven?¶
Основные преимущества Maven:
- Независимость от OS. Сборка проекта происходит в любой операционной системе. Файл проекта один и тот же.
- Управление зависимостями. Редко какие проекты пишутся без использования сторонних библиотек(зависимостей). Эти сторонние библиотеки зачастую тоже в свою очередь используют библиотеки разных версий. Maven позволяет управлять такими сложными зависимостями. Что позволяет разрешать конфликты версий и в случае необходимости легко переходить на новые версии библиотек.
- Возможна сборка из командной строки. Такое часто необходимо для автоматической сборки проекта на сервере (Continuous Integration).
- Хорошая интеграция со средами разработки. Основные среды разработки на java легко открывают проекты которые собираются c помощью maven. При этом зачастую проект настраивать не нужно — он сразу готов к дальнейшей разработке.
- Как следствие — если с проектом работают в разных средах разработки, то maven удобный способ хранения настроек. Настроечный файл среды разработки и для сборки один и тот же — меньше дублирования данных и соответственно ошибок.
- Декларативное описание проекта.
Какие недостатки Maven?¶
- Неочевидность. Если в Ant указывается команда на удаление — и удаляется файл, то в случае Maven надо всем сердцем довериться плагину и документации по нему.
- При таком объёме необходимых знаний документации не так много, особенно по каким-то специальным моментам. Да и просто читать придётся много. Порог вхождения, если потребуется собирать даже не самое сложное приложение куда выше, чем у Ant.
- Если нужно найти какой-то специальный плагин — это будет сделать непросто, плагинов много. И не факт, что найденный подойдёт на все 100% и будет работать без ошибок.
- Нужен доступ в интернет (или придётся разворачивать собственный репозиторий, что трудоёмко)
- Большие трудности, если проект не типовий.
Какими аспектами управляет Maven?¶
Вот основные аспекты, которыми позволяет управлять Maven:
- Создание (Build)
- Документирование (Documentation)
- Отчёты (Reporting)
- Зависимости (Dependencies)
- Релизы (Releases)
- SCM
- Список рассылки (Mailing list)
- Дистрибьюция (Distribution)
Как узнать какую версию Maven вы используете?¶
С помощью следующий команды:
Для чего создан Maven?¶
Основной целью Maven является предоставление разработчику:
- Понятной модели для проектов, которая может быть использовано повторно и была бы проста в поддержании.
- Плагины, которые могут взаимодействовать с этой моделью.
Структура и сожержание проекта Maven указывается в специальном xml-файле, который назывется Project Object Model (POM), который является базовым модулем всей системы.
Какая структура каталогов в Maven?¶
В Maven стандартная структура каталогов, благодаря ей отпадает необходимость прописывать пути к файлам проекта. В корневом каталоге проекта находится pom.xml и несколько текстовых файлов. Всё остальное хозяйство аккуратно разложено в подкаталогах. Главные из них — src и target. Однако, порядок сохраняется и вглубь:
Где вы хранятся файлы классов при компиляции проекта Maven?¶
Файлы классов хранятся в:
Что такое pom.xml?¶
pom.xml — это XML-файл, который содержит информацию о деталях проекта, и конфигурации используемых для создания проекта на Maven. Он всегда находится в базовом каталоге проекта. Этот файл также содержит задачи и плагины. Во время выполнения задач, Maven ищет файл pom.xml в базовой директории проекта. Он читает его и получает необходимую информацию, после чего выполняет задачи. Корневой элемент <project>, схема, которая облегчает редактирование и проверку, и версия pom.xml. Внутри тега project содержится основная и обязательная информация о проекте.
Какую информацию содержит pom.xml?¶
Среди информации которую содержит pom.xml мы можем выделить следующие:
- Зависимости проекта (project dependencies)
- Плагины (plugins)
- Задачи/цели (goals)
- Профиль создания (build proÙles)
- Версия проекта (project version)
- Разработчики (developers)
- Список рассылки (mailing list)
Что такое супер POM?¶
Все POM — файлы являются наследниками родительского pom.xml. Этот POM-файл называется Super POM и содержит значения, унаследованные по умолчанию.
Какие элементы необходимы для минимального POM?¶
Требуемые элементы для минимального POM ето корневий елемент, modelVersion, GroupID, artifactID и версия. Минимальный POM файл:
Что такое зависимости в Maven?¶
Зависимость (dependency) — это те библиотеки, которые непосредственно используются в вашем проекте для компиляции кода или его тестирования.
Что такое артефакт в Maven?¶
Артефакт (artefact) — это, по сути, любая библиотека, хранящаяся в репозитории (месте хранения). Это может быть какая-то зависимость или плагин. Обычно артефактом является JAR-файл, который хранится в репозитории Maven. Каждый артефакт содержит group ID, artifact ID и версию.
Что такое плагин в Maven?¶
Плагин (plugin) — это зависимости Maven’а, расширяющие его функционал.
Что такое задача в Maven?¶
Задача (goal) — это специальная задача, которая относится к сборке проекта и его управлению. Она может привязываться как к нескольким фазам, так и ни к одной. Задача, которая не привязана ни к одной фазе, может быть запущена вне фаз сборки с помощью прямого вызова.
Что такое архетип в Maven?¶
Архетип (archetype) — это некая стандартная компоновка файлов и каталогов в проектах различного рода (веб, swing-проекты и прочие). Другими словами, Maven знает, как обычно строятся проекты и в соответствии с архетипом создает структуру каталогов.
Что такое репозиторий в Maven?¶
Репозиторий (repository) — глобальное хранилище всех библиотек, доступных для Maven, это место где хранятся артефакты: jar файлы, pom-файлы, javadoc, исходники, плагины.
Какие типы репозитория существуют в Maven?¶
В Maven существуют три типы репозитория:
- Локальный (local) репозиторий — это директория, которая хранится на нашем компьютере. Она создаётся в момент первого выполнения любой команды Maven. По умолчанию она расположена в <home директория>/.m2/repository — персональная для каждого пользователя.
- Центральный (central) репозиторий — это репозиториий, который обеспечивается сообществом Maven. Он содержит огромное количество часто используемых библиотек. Который расположен в http://repo1.maven.org/maven2/ и доступен на чтение для всех пользователей в интернете. Если Maven не может найти зависимости в локальном репозитории, то автоматически начинается поиск необходимых файлов в центральном репозитории
- Удалённые (remote) репозиторий — иногда, Maven не может найти необходимые зависимости в центральном репозитории. В этом случае, процесс сборки прерывается и в консоль выводится сообщение об ошибке. Для того, чтобы предотвратить подобную ситуацию, в Maven предусмотрен механизм Удалённого репозитория, который является репозиторием, который определяется самим разработчиком. Там могут храниться все необходимые зависимости.
Какая команда устанавливает JAR-файл в локальное хранилище?¶
Какой порядок поиска зависимостей Maven?¶
Когда мы выполняем собрку проекта в Maven, автоматически начинается поиск необходимых зависимостей в следующем порядке:
- Поиск зависимостей в локальном репозитории Если зависимости не обнаружены, происходит переход к шагу 2.
- Поиск зависимостей в центральном репозитории. Если они не обнаружены и удалённый репозиторий определён, то происходит переход к шагу 4.
- Если удалённый репозиторий не определён, то процесс сборки прекращается и выводится сообщение об ошибке.
- Поиск зависимостей на удалённом репозитории, если они найдены, то происходит их загрузка в локальный репозиторий, если нет — выводится сообщение об ошибке.
Какие два файла настройки есть в Maven, как они называются и где расположены?¶
В Maven, файлы настройки называются settings.xml, и они расположены в двох местах:
- Каталог где установлен Maven: $M2_Home/conf/settings.xml
- Домашняя директория пользователя: $
/.m2/settings.xml
Что такое жизненный цикл сборки в Maven?¶
Жизненный цикл сборки(Lifecycle) — это чётко опредлённая последовательность фаз во время выполнения которых должын быть достигнуты определённые цели. Здесь фаза представляет собой стадию жизненного цикла.
Назовите основные фазы жизненного цикла сборки Maven?¶
Когда Maven начинает сборку проекта, он проходит через определённую последовательность фаз сборки, и выполняет определенные задачи, которые указаны в каждой из фаз.
В Maven есть следующие 3 стандартных жизненных цикла:- Очистка (clean) — очищает артефакты, созданные до сборки.
- Сборка (default or build) — используется для создания приложения.
- Создание сайта проекта (site) — генерирует документацию сайта для проекта.
Что делает команда mvn site?¶
mvn site — создает веб-сайт проекта.
Что делает команда mvn clean?¶
mvn clean — эта команда очищает целевую директорию от созданных в процессе сборки файлов.
Из каких фаз состоит жизненный цикл сборки Clean?¶
Жизненный цикл сборки Clean состоит из следующих этапов:
- pre-clean
- clean
- post-clean
Из каких фаз состоит жизненный цикл сборки Default (Build)?¶
Default (Build) — это основной жизненный цикл Maven, который используется для сборки проектов. Он включает в себя 23 фазы:
- validate — проверяет корректность метаинформации о проекте, подтверждает, является ли проект корректным и вся ли необходимая информация доступа для завершения процесса сборки.
- initialize — инициализирует состояние сборки, например, различные настройки. generate-sources — включает любой исходный код в фазу компиляции.
- 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, например install, то будут выполенны фазы до install и фаза install.
- Различные задачи Maven будут привязаны к различным фазам жизненнго цикла Maven в зависимости от типа архива (JAR/WAR/EAR).
Из каких фаз состоит жизненный цикл сборки Site?¶
Жизненный цикл сборки Site состоит из следующих этапов:
- pre-site
- site
- post-site
- site-deploy
Что сделает эта команда «mvn clean dependency:copy-dependencies package»?¶
Порядок выполнения зависит от порядка вызова целей и фаз. Рассмотрим данную команду. Аргументы clean и package являются фазами сборки до тех пор, пока «dependency:copy-dependencies» является задачей. В этом случае, сначала будет выполнена фаза clean, после этого будет выполнена задача «dependency:copydependencies». После чего будет выполнена фаза package.
Что такое профиль сборки (Build Profile)?¶
Профиль сборки — это множество настроек, которые могут быть использованы для установки или перезаписи стандартных значений сборки Maven. Используя профиль сборки Maven, мы можем настраивать сборку для различных окружений, таких как:
- Разработка или Продакшн.
- Профили настраиваются в файле pom.xml с помощью элементов activeProfiles /profiles и запускаются различными методами.
Какие типы профилей сборки (Build Profiles) вы знаете?¶
В Maven существует три основных типа профилей сборки:
- Per Project — определяется в POM файле, pom.xml
- Per User — определяется в настройках Maven — xml файл ( USER_HOME /.m2/settings.xml).
- Global — определяется в глобальных настройках — xml файл ( M2_HOME /conf/settings.xml).
Как вы можете активировать профили сборки?¶
Профиль сборки Maven может быть активирован различными способами:
- Использованием команды в консоли.
- С помощью настроек Maven.
- С помощью переменных окружения.
- Настройках ОС.
- Существующими, отсутствующими файлами.
Для чего используются Maven плагины?¶
Maven плагины используются для:
- Создания jar – файла.
- Создания war – файла.
- Компиляции кода файлов.
- Юнит-тестирования кода.
- Создание отчётов проекта.
Какие типы плагинов существуют в Maven?¶
В Maven существует два типа плагинов:
- Плагины сборки (Build plugins) — выполняются в процессе сборки и должны быть конфигурированны внутри блока <build></build> файла pom.xml.
- Плагины отчётов (Reporting plugins) — выполняются в процесса генерирования сайта и должны быть конфигурированны внутри блока <reporting></reporting> файла pom.xml.
Когда Maven использует внешние зависимости?¶
Если необходимые файлы не найдены ни в центральном, ни на удалённом репозитории, тогда для решения этой проблемы используются внешние зависимости.
Что нужно определить для внешней зависимости?¶
Внешние зависимости могут быть сконфигурированы в файле pom.xml таким же образом, как и другие зависимости, для этого:
- Определите groupId таким же именем, как и имя файла.
- Определите artifactId таким же именем, как и имя файла.
- Определите область видимости зависимости, как system.
- Укажите абсолютный путь к файлу.
Какая команда создает новый проект на основе архетипа?¶
Переходим в нужную нам директорию и выполняем в терминале следющую команду:
Что такое SNAPSHOT в Maven?¶
SNAPSHOT — это специальная версия, которая показывает текущую рабочую копию. При каждой сборке Maven проверяет наличие новой snapshot версии на удалённом репозитории.
В чем разница между snapshot и версией?¶
В случае с версией, если Maven однажды загрузил версию data-service:1.0, то он больше не будет пытаться загрузить новую версию 1.0 из репозитория. Для того, чтобы скачать обновлённый продукт data-service должен быть обновлён до версии 1.1.
В случае со snapshot, Maven автоматически будет подтягивать крайний snapshot (data-service:1.0-SNAPSHOT) каждый раз, когда будет выполнятся сборка проекта.
Транзитивная зависимость — позволяет избегать необходимости изучать и указывать библиотеки, которые требуются для самой зависимости, и включает их автоматически. Необходимые библиотеки подгружаются в проект автоматически. При разрешении конфликта версий используется принцип «ближайшей» зависимости, то есть выбирается зависимость, путь к которой через список зависимых проектов является наиболее коротким.
Как Maven определяет какую версию зависимостей использовать когда встречается множественный вариант выбора?¶
Dependency mediation — определяет, какая версия зависимости будет использоваться, когда встречается несколько версий артефактов, если две версии зависимости на той же глубине в дереве зависимостей, то будет использоваться та которая объявлена первой. Здесь важен порядок объявления: первое объявление выигрывает.
Что такое область видимости зависимостей (dependency scope)? Назовите значения dependency scope.¶
Существует 6 областей:
- compile — это область по умолчанию, использутся, если ничего больше не определено. Compile зависимости доступны во всех classpath проекта.
- provided — это очень похоже на compile, но указывает на то, что вы ожидаете от JDK или контейнера предоставить зависимость в ходе выполнения. Эта область доступна только на compilation и test classpath и не является транзитивной.
- runtime — эта область указывает на то, что зависимость не обязательна для compilation, но для фаз выполнения.
- test — эта область указывает, что зависимость не обязательна для нормального использования приложения.
- system — эта область похожа на provided за исключением того, что вы предоставляете JAR. Артефакт всегда доступен и не смотрит в репозиторий.
- import — эта область используется в зависимости типа pom в <dependencyManagement> разделе. Это указывает на то, что определенный POM будет заменен зависимостями в этом POM <dependencyManagement> разделе.
Какой минимальный набор информации нужен для сопоставления ссылки зависимостей на раздел dependencyManagement?¶
Минимальный набор информации такой
Как сослаться на свойство(property) определенное в файле pom.xml?¶
На все свойства в pom.xml, можно сослаться с помощью префиксов «project.» или
«pom.» Ниже приведёт пример некоторых часто используемых элементов.- $
— «target» директория, или тоже самое - $
. - $
— путь к директории куда компилятор складывает файлы по умолчанию «target/classes». - $
или $ — имя проекта. - $
или $ — версия проекта.
Для чего нужен элемент <execution> в POM файле?¶
Элемент <execution> содержит информацию, необходимую для выполнения плагина.
Каким образом можно исключить зависимость в Maven?¶
Файл описания проекта предусматривает возможность исключить зависимость в случае обнаружения цикличности или отсутствия необходимости в определённой библиотеке. Зависимость может быть исключена используя элемент exclusion.
Что является полным именем артефакта?¶
Если вы не определяете никакой информации, где же ваш POM унаследует ее?¶
Все POM-и наследуются от родителя (несмотря на то явно определен он или нет). Это базовий POM известний как супер POM, он содержит значения, которие наследуются по умолчанию.
При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. Можете ли вы собрать проект без интернета?¶
Да, можете, но если в вашем локальном репозитории есть все необходимые для сборки артефакты.
Если при сборке проекта в тестах произошла ошибка. Как собрать проект без запуска тестов?¶
Для запуска сборки без выполнения тестов добавьте -Dmaven.test.skip=true к команде в строке запуска maven:
Как запустить только один тест?¶
Для запуска только одного теста добавьте -Dtest=[Имя класса] к команде в строке запуска maven. Например: