notes:java:maven
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
notes:java:maven [2018/12/14 16:06] – [Для чего нужен элемент <execution> в POM файле?] kibi | notes:java:maven [2018/12/19 18:35] (current) – kibi | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== Maven FAQ ====== |
{{tag> | {{tag> | ||
+ | |||
+ | Основные ссылки по Maven: | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ===== Что такое сборка проекта, | ||
+ | |||
+ | <wrap em> | ||
+ | |||
+ | <wrap em> | ||
+ | * Компиляция исходного кода в бинарный код | ||
+ | * Сборка бинарного кода | ||
+ | * Выполнение тестов | ||
+ | * Разворачивание программы на производственной платформе | ||
+ | * Написание сопроводительной документации или описание изменений новой версии | ||
+ | |||
+ | ===== Что такое Maven? Как он работает? | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | Если собирать большие проекты с командной строки, | ||
+ | |||
+ | Maven обеспечивает декларативную, | ||
+ | |||
+ | ===== Какие преимущества Maven? ===== | ||
+ | |||
+ | Основные преимущества Maven: | ||
+ | * Независимость от ОС. Сборка проекта происходит в любой операционной системе. Файл проекта один и тот же. | ||
+ | * Управление зависимостями. Редко какие проекты пишутся без использования сторонних библиотек(зависимостей). Эти сторонние библиотеки зачастую тоже в свою очередь используют библиотеки разных версий. Maven позволяет управлять такими сложными зависимостями. Это позволяет разрешать конфликты версий, | ||
+ | * Возможна сборка из командной строки. Такое часто необходимо для автоматической сборки проекта на сервере ([[wp> | ||
+ | * Хорошая интеграция со средами разработки. Основные среды разработки на java легко открывают проекты, | ||
+ | * Как следствие, | ||
+ | * Декларативное описание проекта. Указано **что, где и когда** надо сделать, | ||
+ | |||
+ | ===== Какие недостатки Maven? ===== | ||
+ | |||
+ | Недостатки Maven: | ||
+ | * Неочевидность. Если в [[https:// | ||
+ | * При таком объёме необходимых знаний документации не так много, особенно по каким-то специальным моментам. Да и просто читать придётся много. Порог вхождения, | ||
+ | * Если нужно найти какой-то специальный плагин - это будет сделать непросто, | ||
+ | * Нужен доступ в интернет (или придётся разворачивать собственный репозитарий, | ||
+ | * Большие трудности, | ||
+ | |||
+ | ===== Какими аспектами управляет Maven? ===== | ||
+ | |||
+ | Вот основные аспекты, | ||
+ | * Создание (Build) | ||
+ | * Документирование (Documentation) | ||
+ | * Отчёты (Reporting) | ||
+ | * Зависимости (Dependencies) | ||
+ | * Релизы (Releases) | ||
+ | * Системы контроля версий (SCM) | ||
+ | * Список рассылки (Mailing list) | ||
+ | * Дистрибьюция (Distribution) | ||
+ | |||
+ | ===== Как узнать, | ||
+ | |||
+ | Версию можно узнать с помощью следующей команды: | ||
+ | <code bash>mvn --version</ | ||
+ | |||
+ | ===== Для чего был создан Maven? ===== | ||
+ | |||
+ | Основной целью Maven является предоставление разработчику: | ||
+ | * Понятной модели для проектов, | ||
+ | * Плагинов, | ||
+ | |||
+ | Структура и содержание проекта Maven указывается в специальном xml-файле, | ||
+ | |||
+ | ===== Какая структура каталогов в Maven? ===== | ||
+ | |||
+ | В Maven [[https:// | ||
+ | |||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | ===== Где хранятся файлы классов при компиляции проекта Maven? ===== | ||
+ | |||
+ | Файлы классов хранятся в: '' | ||
+ | |||
+ | ===== Что такое pom.xml? ===== | ||
+ | |||
+ | '' | ||
+ | |||
+ | Во время выполнения задач, Maven ищет файл '' | ||
+ | |||
+ | Корневой элемент ''< | ||
+ | |||
+ | <code xml>< | ||
+ | xmlns: | ||
+ | xsi: | ||
+ | |||
+ | Внутри тега '' | ||
+ | |||
+ | ===== Какую информацию содержит pom.xml? ===== | ||
+ | |||
+ | Среди информации которую содержит pom.xml, мы можем выделить следующие блоки: | ||
+ | * Зависимости проекта (project dependencies) | ||
+ | * Плагины (plugins) | ||
+ | * Задачи/ | ||
+ | * Профиль создания (build profiles) | ||
+ | * Версия проекта (project version) | ||
+ | * Разработчики (developers) | ||
+ | * Список рассылки (mailing list) | ||
+ | |||
+ | ===== Что такое супер POM? ===== | ||
+ | |||
+ | Все POM-файлы являются наследниками родительского '' | ||
+ | |||
+ | ===== Какие элементы необходимы для минимального POM? ===== | ||
+ | |||
+ | Обязательные элементы для минимального POM это корневой элемент, | ||
+ | <code xml> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Что такое зависимости в Maven? ===== | ||
+ | |||
+ | <wrap em> | ||
+ | |||
+ | ===== Что такое артефакт в Maven? ===== | ||
+ | |||
+ | <wrap em> | ||
+ | |||
+ | ===== Что такое плагин в Maven? ===== | ||
+ | |||
+ | <wrap em> | ||
+ | |||
+ | ===== Что такое задача в Maven? ===== | ||
+ | |||
+ | <wrap em> | ||
+ | |||
+ | ===== Что такое архетип в Maven? ===== | ||
+ | |||
+ | <wrap em> | ||
+ | |||
+ | ===== Что такое репозитарий в Maven? ===== | ||
+ | |||
+ | <wrap em> | ||
+ | |||
+ | ===== Какие типы репозитария существуют в Maven? ===== | ||
+ | |||
+ | В Maven существуют три типа репозитариев: | ||
+ | * **Локальный (local) репозитарий** - это директория, | ||
+ | * **Центральный (central) репозитарий** - это репозитарий, | ||
+ | * **Удалённый (remote) репозитарий**. Иногда Maven не может найти необходимые зависимости в центральном репозитарии, | ||
+ | |||
+ | ===== Какая команда устанавливает JAR-файл в локальное хранилище (репозитарий)? | ||
+ | |||
+ | <code bash>mvn install</ | ||
+ | |||
+ | ===== Какой порядок поиска зависимостей Maven? ===== | ||
+ | |||
+ | Когда мы выполняем собрку проекта в Maven, автоматически начинается поиск необходимых зависимостей в следующем порядке: | ||
+ | - Поиск зависимостей в локальном репозитарии. Если зависимости не обнаружены, | ||
+ | - Поиск зависимостей в центральном репозитарии. Если они не обнаружены и удалённый репозитарий определён, | ||
+ | - Если удалённый репозитарий не определён, | ||
+ | - Поиск зависимостей на удалённом репозитарии, | ||
+ | |||
+ | ===== Какие два файла настройки есть в Maven, как они называются и где расположены? | ||
+ | |||
+ | В Maven, файлы настройки называются '' | ||
+ | * каталог где установлен Maven: '' | ||
+ | * домашняя директория пользователя: | ||
+ | |||
+ | ===== Что такое жизненный цикл сборки в Maven? ===== | ||
+ | |||
+ | <wrap em> | ||
+ | |||
+ | ===== Назовите основные фазы жизненного цикла сборки Maven? ===== | ||
+ | |||
+ | Когда Maven начинает сборку проекта, | ||
+ | |||
+ | В Maven есть следующие три стандартных жизненных цикла: | ||
+ | * **Очистка (clean)** - очищает артефакты, | ||
+ | * **Сборка (default or build)** - используется для создания приложения. | ||
+ | * **Создание сайта проекта (site)** - генерирует документацию сайта для проекта. | ||
+ | |||
+ | ===== Что делает команда mvn site? ===== | ||
+ | |||
+ | <code bash>mvn site</ | ||
+ | |||
+ | ===== Что делает команда mvn clean? ===== | ||
+ | |||
+ | <code bash>mvn clean</ | ||
===== Из каких фаз состоит жизненный цикл сборки Clean? ===== | ===== Из каких фаз состоит жизненный цикл сборки Clean? ===== | ||
Line 32: | Line 233: | ||
* **post-integration-test** - выполняет действия, | * **post-integration-test** - выполняет действия, | ||
* **verify** - выполняет любые проверки для подтверждения того, что пакет пригоден и отвечает критериям качества. | * **verify** - выполняет любые проверки для подтверждения того, что пакет пригоден и отвечает критериям качества. | ||
- | * **install** - переносит пакет в локальный репозиторий, откуда он будет доступен для использования как зависимость в других проектах. | + | * **install** - переносит пакет в локальный репозитарий, откуда он будет доступен для использования как зависимость в других проектах. |
- | * **deploy** - копирует финальный пакет (архив) в удалённый репозиторий для, того, чтобы сделать его доступным другим разработчикам и проектам. | + | * **deploy** - копирует финальный пакет (архив) в удалённый репозитарий для, того, чтобы сделать его доступным другим разработчикам и проектам. |
Здесь также необходимо уточнить два момента: | Здесь также необходимо уточнить два момента: | ||
Line 53: | Line 254: | ||
<code bash>mvn clean dependency: | <code bash>mvn clean dependency: | ||
- | Аргументы '' | + | Аргументы '' |
+ | |||
+ | В этом случае, | ||
===== Что такое профиль сборки (Build Profile)? ===== | ===== Что такое профиль сборки (Build Profile)? ===== | ||
Line 97: | Line 300: | ||
===== Когда Maven использует внешние зависимости? | ===== Когда Maven использует внешние зависимости? | ||
- | Если необходимые файлы не найдены ни в центральном, | + | Если необходимые файлы не найдены ни в центральном, |
===== Что нужно определить для внешней зависимости? | ===== Что нужно определить для внешней зависимости? | ||
Line 114: | Line 317: | ||
===== Что такое SNAPSHOT в Maven? ===== | ===== Что такое SNAPSHOT в Maven? ===== | ||
- | <wrap em> | + | <wrap em> |
===== В чем разница между snapshot и версией? | ===== В чем разница между snapshot и версией? | ||
- | В случае с **обычной версией**, | + | В случае с **обычной версией**, |
В случае со **snapshot**, | В случае со **snapshot**, | ||
Line 137: | Line 340: | ||
* **runtime** - эта область указывает на то, что зависимость не обязательна для '' | * **runtime** - эта область указывает на то, что зависимость не обязательна для '' | ||
* **test** - эта область указывает, | * **test** - эта область указывает, | ||
- | * **system** - эта область похожа на '' | + | * **system** - эта область похожа на '' |
* **import** - эта область используется в зависимости типа '' | * **import** - эта область используется в зависимости типа '' | ||
Line 169: | Line 372: | ||
Все POM-ы наследуются от родителя, | Все POM-ы наследуются от родителя, | ||
- | ===== При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. Можете ли вы собрать проект без интернета? | + | ===== При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. Можете ли вы собрать проект без интернета? |
- | ===== | + | |
- | Да, можете, | + | Да, можете, |
===== Если при сборке проекта в тестах произошла ошибка, | ===== Если при сборке проекта в тестах произошла ошибка, | ||
Line 200: | Line 403: | ||
* **description** - элемент представляет собой общее описание проекта. Это часто используется в генерации документации Maven | * **description** - элемент представляет собой общее описание проекта. Это часто используется в генерации документации Maven | ||
* **url** - интернет-страница проекта | * **url** - интернет-страница проекта | ||
- | * **repositories** - репозитории для артефактов | + | * **repositories** - репозитарии для артефактов |
- | * **pluginRepositories** - репозитории для плагинов Maven | + | * **pluginRepositories** - репозитарии для плагинов Maven |
+ | |||
+ | < | ||
===== См. также ===== | ===== См. также ===== | ||
{{backlinks> | {{backlinks> |
notes/java/maven.1544792801.txt.gz · Last modified: 2018/12/14 16:06 by kibi