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:21] – [Что такое Maven? Как он работает?] kibi | notes:java:maven [2018/12/19 18:35] (current) – kibi | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== Maven FAQ ====== |
{{tag> | {{tag> | ||
+ | |||
+ | Основные ссылки по Maven: | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
===== Что такое сборка проекта, | ===== Что такое сборка проекта, | ||
- | Сборка (англ. assembly) - двоичный файл, содержащий исполняемый код программы или другой, | + | <wrap em>Сборка (англ. assembly)</ |
<wrap em> | <wrap em> | ||
Line 25: | Line 30: | ||
Основные преимущества Maven: | Основные преимущества Maven: | ||
- | Независимость от OS. Сборка проекта происходит в любой операционной системе. Файл проекта один и тот же. | + | * Независимость от ОС. Сборка проекта происходит в любой операционной системе. Файл проекта один и тот же. |
- | Управление зависимостями. Редко какие проекты пишутся без использования сторонних библиотек(зависимостей). Эти сторонние библиотеки зачастую тоже в свою очередь используют библиотеки разных версий. Maven позволяет управлять такими сложными зависимостями. | + | |
- | Возможна сборка из командной строки. Такое часто необходимо для автоматической сборки проекта на сервере (Continuous Integration). | + | |
- | Хорошая интеграция со средами разработки. Основные среды разработки на java легко открывают проекты которые собираются c помощью maven. При этом зачастую проект настраивать не нужно | + | |
- | Как следствие | + | |
- | Декларативное описание проекта. | + | |
+ | |||
+ | ===== Какие недостатки Maven? ===== | ||
- | Какие недостатки Maven? | ||
Недостатки Maven: | Недостатки Maven: | ||
- | Неочевидность. Если в Ant указывается команда на удаление | + | * Неочевидность. Если в [[https:// |
- | При таком объёме необходимых знаний документации не так много, особенно по каким-то специальным моментам. Да и просто читать придётся много. Порог вхождения, | + | |
- | Если нужно найти какой-то специальный плагин - это будет сделать непросто, | + | |
- | Нужен доступ в интернет (или придётся разворачивать собственный репозиторий, что трудоёмко) | + | |
- | Большие трудности, | + | |
+ | |||
+ | ===== Какими аспектами управляет Maven? ===== | ||
- | Какими аспектами управляет Maven? | ||
Вот основные аспекты, | Вот основные аспекты, | ||
- | Создание (Build) | + | * Создание (Build) |
- | Документирование (Documentation) | + | |
- | Отчёты (Reporting) | + | |
- | Зависимости (Dependencies) | + | |
- | Релизы (Releases) | + | |
- | SCM | + | * Системы контроля версий (SCM) |
- | Список рассылки (Mailing list) | + | |
- | Дистрибьюция (Distribution) | + | |
- | Как узнать какую версию Maven вы используете? | + | ===== Как узнать, какую версию Maven вы используете? |
- | С помощью следующий команди: | + | |
- | mvn --version | + | Версию можно узнать с помощью следующей команды: |
+ | <code bash>mvn --version</ | ||
+ | |||
+ | ===== Для чего был создан Maven? ===== | ||
- | Для чего создан Maven? | ||
Основной целью Maven является предоставление разработчику: | Основной целью Maven является предоставление разработчику: | ||
- | Понятной модели для проектов, | + | * Понятной модели для проектов, |
- | Плагины, которые могут взаимодействовать с этой моделью. | + | |
- | Структура и сожержание проекта Maven указывается в специальном xml-файле, | + | |
- | Какая структура | + | Структура |
- | В Maven стандартная структура каталогов, благодаря | + | |
+ | ===== Какая структура каталогов в Maven? ===== | ||
- | Где вы хранятся файлы классов при компиляции проекта | + | В Maven [[https:// |
- | Файлы классов хранятся в: ${basedir}/ | + | |
- | Что такое pom.xml? | + | | '' |
- | pom.xml - это XML-файл, который содержит информацию о деталях проекта, и | + | | '' |
- | Корневой элемент < | + | | '' |
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
- | Какую информацию содержит pom.xml? | + | ===== Где хранятся файлы |
- | Среди информации | + | |
- | Зависимости | + | |
- | Плагины (plugins) | + | |
- | Задачи/ | + | |
- | Профиль создания (build profiles) | + | |
- | Версия проекта | + | |
- | Разработчики (developers) | + | |
- | Список рассылки (mailing list) | + | |
- | Что такое супер POM? | + | Файлы |
- | Все POM - файлы | + | |
- | Какие элементы необходимы для минимального POM? | + | ===== Что такое |
- | Требуемые элементы для минимального POM ето | + | |
+ | '' | ||
- | Что такое зависимости в Maven? | + | Во время выполнения |
- | Зависимость (dependency) - это те библиотеки, которые непосредственно используются в вашем проекте для компиляции кода или его | + | |
- | Что такое артефакт в Maven? | + | Корневой элемент ''< |
- | Артефакт (artefact) - это, по сути, | + | |
- | Что такое плагин в Maven? | + | <code xml>< |
- | Плагин (plugin) | + | |
+ | xsi: | ||
- | Что такое задача в Maven? | + | Внутри тега |
- | Задача (goal) - это специальная задача, | + | |
- | Что такое архетип в Maven? | + | ===== Какую информацию содержит pom.xml? ===== |
- | Архетип (archetype) - это | + | |
- | Что такое | + | Среди информации которую содержит pom.xml, мы можем выделить |
- | Репозиторий (repository) - глобальное хранилище всех библиотек, доступных для Maven, это место где хранятся артефакты: jar файлы, pom-файлы, javadoc, исходники, плагины. | + | * Зависимости проекта (project dependencies) |
+ | * Плагины (plugins) | ||
+ | * Задачи/цели (goals) | ||
+ | * Профиль | ||
+ | * Версия проекта | ||
+ | * Разработчики | ||
+ | * Список рассылки (mailing list) | ||
- | Какие | + | ===== Что такое супер |
- | В Maven существуют три типы репозитория: | + | |
- | Локальный (local) репозиторий - это директория, которая хранится на нашем компьютере. Она | + | |
- | Центральный (central) репозиторий - это репозиториий, | + | |
- | Удалённые (remote) репозиторий - иногда, | + | |
- | Какая команда установляет JAR-файл в локальное хранилище? | + | Все POM-файлы являются наследниками родительского '' |
- | mvn install | + | |
+ | ===== Какие элементы необходимы для минимального 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, файлы настройки называются '' | ||
+ | * каталог где установлен Maven: '' | ||
+ | * домашняя директория пользователя: | ||
+ | |||
+ | ===== Что такое жизненный цикл сборки в Maven? ===== | ||
- | Какие два файла настройки есть в Maven, как они называются и где расположены? | + | <wrap em>Жизненный цикл сборки |
- | В Maven, файлы настройки называются settings.xml, | + | |
- | Каталог где установлен Maven: $M2_Home/ | + | |
- | Домашняя | + | |
- | Что такое жизненный цикл сборки | + | ===== Назовите основные фазы жизненного цикла |
- | Жизненный цикл сборки(Lifecycle) - это чётко опредлённая последовательность фаз | + | |
- | Назовите основные фазы жизненного цикла сборки Maven? | ||
Когда Maven начинает сборку проекта, | Когда Maven начинает сборку проекта, | ||
- | В Maven есть следующие 3 стандартных жизненных цикла: | ||
- | Очистка (clean) - очищает артефакты, | ||
- | Сборка (default or build) - используется для создания приложения. | ||
- | Создание сайта проекта (site) - генерирует документацию сайта для проекта. | ||
- | Что делает команда mvn site? | + | В Maven есть следующие три стандартных жизненных цикла: |
- | mvn site - создает | + | * **Очистка (clean)** - очищает |
+ | * **Сборка (default or build)** | ||
+ | * **Создание сайта проекта (site)** | ||
- | Что делает команда mvn clean? | + | ===== Что делает команда mvn site? ===== |
- | mvn clean - эта команда очищает целевую директорию от созданных в процессе сборки файлов. | + | |
+ | <code bash>mvn site</ | ||
+ | |||
+ | ===== Что делает команда mvn clean? | ||
+ | |||
+ | <code bash>mvn clean</ | ||
===== Из каких фаз состоит жизненный цикл сборки Clean? ===== | ===== Из каких фаз состоит жизненный цикл сборки Clean? ===== | ||
Line 173: | Line 233: | ||
* **post-integration-test** - выполняет действия, | * **post-integration-test** - выполняет действия, | ||
* **verify** - выполняет любые проверки для подтверждения того, что пакет пригоден и отвечает критериям качества. | * **verify** - выполняет любые проверки для подтверждения того, что пакет пригоден и отвечает критериям качества. | ||
- | * **install** - переносит пакет в локальный репозиторий, откуда он будет доступен для использования как зависимость в других проектах. | + | * **install** - переносит пакет в локальный репозитарий, откуда он будет доступен для использования как зависимость в других проектах. |
- | * **deploy** - копирует финальный пакет (архив) в удалённый репозиторий для, того, чтобы сделать его доступным другим разработчикам и проектам. | + | * **deploy** - копирует финальный пакет (архив) в удалённый репозитарий для, того, чтобы сделать его доступным другим разработчикам и проектам. |
Здесь также необходимо уточнить два момента: | Здесь также необходимо уточнить два момента: | ||
Line 194: | Line 254: | ||
<code bash>mvn clean dependency: | <code bash>mvn clean dependency: | ||
- | Аргументы '' | + | Аргументы '' |
+ | |||
+ | В этом случае, | ||
===== Что такое профиль сборки (Build Profile)? ===== | ===== Что такое профиль сборки (Build Profile)? ===== | ||
Line 238: | Line 300: | ||
===== Когда Maven использует внешние зависимости? | ===== Когда Maven использует внешние зависимости? | ||
- | Если необходимые файлы не найдены ни в центральном, | + | Если необходимые файлы не найдены ни в центральном, |
===== Что нужно определить для внешней зависимости? | ===== Что нужно определить для внешней зависимости? | ||
Line 255: | Line 317: | ||
===== Что такое SNAPSHOT в Maven? ===== | ===== Что такое SNAPSHOT в Maven? ===== | ||
- | <wrap em> | + | <wrap em> |
===== В чем разница между snapshot и версией? | ===== В чем разница между snapshot и версией? | ||
- | В случае с **обычной версией**, | + | В случае с **обычной версией**, |
В случае со **snapshot**, | В случае со **snapshot**, | ||
Line 278: | Line 340: | ||
* **runtime** - эта область указывает на то, что зависимость не обязательна для '' | * **runtime** - эта область указывает на то, что зависимость не обязательна для '' | ||
* **test** - эта область указывает, | * **test** - эта область указывает, | ||
- | * **system** - эта область похожа на '' | + | * **system** - эта область похожа на '' |
* **import** - эта область используется в зависимости типа '' | * **import** - эта область используется в зависимости типа '' | ||
Line 312: | Line 374: | ||
===== При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. Можете ли вы собрать проект без интернета? | ===== При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. Можете ли вы собрать проект без интернета? | ||
- | Да, можете, | + | Да, можете, |
===== Если при сборке проекта в тестах произошла ошибка, | ===== Если при сборке проекта в тестах произошла ошибка, | ||
Line 341: | Line 403: | ||
* **description** - элемент представляет собой общее описание проекта. Это часто используется в генерации документации Maven | * **description** - элемент представляет собой общее описание проекта. Это часто используется в генерации документации Maven | ||
* **url** - интернет-страница проекта | * **url** - интернет-страница проекта | ||
- | * **repositories** - репозитории для артефактов | + | * **repositories** - репозитарии для артефактов |
- | * **pluginRepositories** - репозитории для плагинов Maven | + | * **pluginRepositories** - репозитарии для плагинов Maven |
< | < |
notes/java/maven.1544793719.txt.gz · Last modified: 2018/12/14 16:21 by kibi