MAVEN » История » Версия 2
Александр Александров, 25.04.2019 11:39
1 | 1 | Александр Александров | h1. MAVEN |
---|---|---|---|
2 | |||
3 | h2. Вопросы |
||
4 | |||
5 | # Что такое сборка проекта, автоматизация сборки? |
||
6 | 2 | Александр Александров | # Что такое Maven? Как он работает? |
7 | 1 | Александр Александров | # Какие преимущества Maven? |
8 | # Какие недостатки Maven? |
||
9 | # Какими аспектами управляет Maven? |
||
10 | # Как узнать какую версию Maven вы используете? |
||
11 | # Для чего создан Maven? |
||
12 | # Какая структура каталогов в Maven? |
||
13 | # Где вы хранятся файлы классов при компиляции проекта Maven? |
||
14 | # Что такое pom.xml? |
||
15 | # Какую информацию содержит pom.xml? |
||
16 | # Что такое супер POM? |
||
17 | # Какие элементы необходимы для минимального POM? |
||
18 | # Что такое зависимости в Maven? |
||
19 | # Что такое артефакт в Maven? |
||
20 | # Что такое плагин в Maven? |
||
21 | # Что такое задача в Maven? |
||
22 | # Что такое архетип в Maven? |
||
23 | # Что такое репозиторий в Maven? |
||
24 | # Какие типы репозитория существуют в Maven? |
||
25 | # Какая команда установляет JAR-файл в локальное хранилище? |
||
26 | # Какой порядок поиска зависимостей Maven? |
||
27 | # Какие два файла настройки есть в Maven, как они называются и где расположены? |
||
28 | # Что такое жизненный цикл сборки в Maven? |
||
29 | # Назовите основные фазы жизненного цикла сборки Maven? |
||
30 | # Что делает команда mvn site? |
||
31 | # Что делает команда mvn clean? |
||
32 | # Из каких фаз состоит жизненный цикл сборки Clean? |
||
33 | # Из каких фаз состоит жизненный цикл сборки Default (Build)? |
||
34 | # Из каких фаз состоит жизненный цикл сборки Site? |
||
35 | # Что сделает эта команда "mvn clean dependency:copy-dependencies package"? |
||
36 | # Что такое профиль сборки (Build ProÙle)? |
||
37 | # Какие типы профилей сборки (Build ProÙles) вы знаете? |
||
38 | # Как вы можете активировать профили сборки? |
||
39 | # Для чего используются Maven плагины? |
||
40 | # Какие типы плагинов существуют в Maven? |
||
41 | # Когда Maven использует внешние зависимости? |
||
42 | # Что нужно определить для внешней зависимости? |
||
43 | # Какая команда создает новый проект на основе архетипа? |
||
44 | # Что такое SNAPSHOT в Maven? |
||
45 | # В чем разница между snapshot и версией? |
||
46 | # Что такое транзитивная зависимость в Maven? |
||
47 | # множественный вариант выбора? |
||
48 | # Что такое область видимости зависимостей (dependency scope)? Назовите значения dependency scope. |
||
49 | # Какой минимальный набор информации нужен для сопоставления ссылки зависимостей на раздел dependencyManagement? |
||
50 | # Как сослаться на свойство(property) определенное в файле pom.xml? |
||
51 | # Для чего нужен элемент <execution> в POM файле? |
||
52 | # Каким образом можно исключить зависимость в Maven? |
||
53 | # Что является полным именем артефакта? |
||
54 | # Если вы не определяете никакой информации, где же ваш POM унаследует ее? |
||
55 | # При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. |
||
56 | # Можете ли вы собрать проект без интернета? |
||
57 | # Если при сборке проекта в тестах произошла ошибка. Как собрать проект без запуска тестов? |
||
58 | # Как запустить только один тест? |
||
59 | # Как остановить распространение наследования плагинов для дочерних POM? |
||
60 | # Какие теги pom.xml вы знаете. |
||
61 | |||
62 | h2. Ответы |
||
63 | |||
64 | h3. Что такое сборка проекта, автоматизация сборки? |
||
65 | 2 | Александр Александров | |
66 | Сборка (англ. assembly) - двоичный файл, содержащий исполняемый код программы или другой, подготовленный для использования информационный продукт. |
||
67 | Автоматизация сборки - этап написания скриптов или автоматизация широкого спектра задач применительно к ПО, применяемому разработчиками в их повседневной деятельности, включая такие действия, как: |
||
68 | |||
69 | * Компиляция исходного кода в бинарный код |
||
70 | * Сборка бинарного кода |
||
71 | * Выполнение тестов |
||
72 | * Разворачивание программы на производственной платформе |
||
73 | * Написание сопроводительной документации или описание изменений новой версии |
||
74 | |||
75 | h3. Что такое Maven? Как он работает? |
||
76 | |||
77 | Apache Maven - это фреймворк для автоматизации сборки проектов, компиляции, создания jar, создания дистрибутива программы, генерации документации. Если собирать большие проекты с командной строки, то команда для сборки будет очень длинной, поэтому её иногда записывают в bat/sh скрипт. Но такие скрипты зависят от платформы. Для того чтобы избавиться от этой зависимостии и упростить написание скрипта используют инструменты для сборки проекта. Maven, обеспечивает декларативную, а не императивную сборку проекта. То есть, в файлах проекта pom.xml содержится его декларативное описание, а не отдельные команды. Все задачи по обработке файлов Maven выполняется через плагины. |
||
78 | |||
79 | 1 | Александр Александров | h3. Какие преимущества Maven? |
80 | 2 | Александр Александров | |
81 | Основные преимущества Maven: |
||
82 | |||
83 | * Независимость от OS. Сборка проекта происходит в любой операционной системе. Файл проекта один и тот же. |
||
84 | * Управление зависимостями. Редко какие проекты пишутся без использования сторонних библиотек(зависимостей). Эти сторонние библиотеки зачастую тоже в свою очередь используют библиотеки разных версий. Maven позволяет управлять такими сложными зависимостями. Что позволяет разрешать конфликты версий и в случае необходимости легко переходить на новые версии библиотек. |
||
85 | * Возможна сборка из командной строки. Такое часто необходимо для автоматической сборки проекта на сервере (Continuous Integration). |
||
86 | * Хорошая интеграция со средами разработки. Основные среды разработки на java легко открывают проекты которые собираются c помощью maven. При этом зачастую проект настраивать не нужно - он сразу готов к дальнейшей разработке. |
||
87 | * Как следствие - если с проектом работают в разных средах разработки, то maven удобный способ хранения настроек. Настроечный файл среды разработки и для сборки один и тот же - меньше дублирования данных и соответственно ошибок. |
||
88 | * Декларативное описание проекта. |
||
89 | |||
90 | 1 | Александр Александров | h3. Какие недостатки Maven? |
91 | 2 | Александр Александров | |
92 | Недостатки Maven: |
||
93 | |||
94 | * Неочевидность. Если в Ant указывается команда на удаление - и удаляется файл, то в случае Maven надо всем сердцем довериться плагину и документации по нему. |
||
95 | * При таком объёме необходимых знаний документации не так много, особенно по каким-то специальным моментам. Да и просто читать придётся много. Порог вхождения, если потребуется собирать даже не самое сложное приложение куда выше, чем у Ant. |
||
96 | * Если нужно найти какой-то специальный плагин - это будет сделать непросто, плагинов много. И не факт, что найденный подойдёт на все 100% и будет работать без ошибок. |
||
97 | * Нужен доступ в интернет (или придётся разворачивать собственный репозиторий, что трудоёмко) |
||
98 | * Большие трудности, если проект не типовий. |
||
99 | |||
100 | 1 | Александр Александров | h3. Какими аспектами управляет Maven? |
101 | 2 | Александр Александров | |
102 | Вот основные аспекты, которыми позволяет управлять Maven: |
||
103 | |||
104 | * Создание (Build) |
||
105 | * Документирование (Documentation) |
||
106 | * Отчёты (Reporting) |
||
107 | * Зависимости (Dependencies) |
||
108 | * Релизы (Releases) |
||
109 | * SCM |
||
110 | * Список рассылки (Mailing list) |
||
111 | * Дистрибьюция (Distribution) |
||
112 | |||
113 | 1 | Александр Александров | h3. Как узнать какую версию Maven вы используете? |
114 | 2 | Александр Александров | |
115 | С помощью следующий команды: |
||
116 | |||
117 | <pre> |
||
118 | mvn --version |
||
119 | </pre> |
||
120 | |||
121 | 1 | Александр Александров | h3. Для чего создан Maven? |
122 | 2 | Александр Александров | |
123 | Основной целью Maven является предоставление разработчику: |
||
124 | |||
125 | * Понятной модели для проектов, которая может быть использовано повторно и была бы проста в поддержании. |
||
126 | * Плагины, которые могут взаимодействовать с этой моделью. |
||
127 | |||
128 | Структура и сожержание проекта Maven указывается в специальном xml-файле, который назывется Project Object Model (POM), который является базовым модулем всей системы. |
||
129 | |||
130 | 1 | Александр Александров | h3. Какая структура каталогов в Maven? |
131 | 2 | Александр Александров | |
132 | В Maven стандартная структура каталогов, благодаря ей отпадает необходимость прописывать пути к файлам проекта. В корневом каталоге проекта находится pom.xml и несколько текстовых файлов. Всё остальное хозяйство аккуратно разложено в подкаталогах. Главные из них - src и target. Однако, порядок сохраняется и вглубь: |
||
133 | |||
134 | {{dmsf_image(347)}} |
||
135 | |||
136 | 1 | Александр Александров | h3. Где вы хранятся файлы классов при компиляции проекта Maven? |
137 | 2 | Александр Александров | |
138 | Файлы классов хранятся в: |
||
139 | |||
140 | <pre> |
||
141 | ${basedir}/target/classes/. |
||
142 | </pre> |
||
143 | |||
144 | 1 | Александр Александров | h3. Что такое pom.xml? |
145 | 2 | Александр Александров | |
146 | pom.xml - это XML-файл, который содержит информацию о деталях проекта, и конфигурации используемых для создания проекта на Maven. Он всегда находится в базовом каталоге проекта. Этот файл также содержит задачи и плагины. Во время выполнения задач, Maven ищет файл pom.xml в базовой директории проекта. Он читает его и получает необходимую информацию, после чего выполняет задачи. Корневой элемент <project>, схема, которая облегчает редактирование и проверку, и версия pom.xml. Внутри тега project содержится основная и обязательная информация о проекте. |
||
147 | |||
148 | 1 | Александр Александров | h3. Какую информацию содержит pom.xml? |
149 | 2 | Александр Александров | |
150 | Среди информации которую содержит pom.xml мы можем выделить следующие: |
||
151 | |||
152 | * Зависимости проекта (project dependencies) |
||
153 | * Плагины (plugins) |
||
154 | * Задачи/цели (goals) |
||
155 | * Профиль создания (build proÙles) |
||
156 | * Версия проекта (project version) |
||
157 | * Разработчики (developers) |
||
158 | * Список рассылки (mailing list) |
||
159 | |||
160 | 1 | Александр Александров | h3. Что такое супер POM? |
161 | 2 | Александр Александров | |
162 | Все POM - файлы являются наследниками родительского pom.xml. Этот POM-файл называется Super POM и содержит значения, унаследованные по умолчанию. |
||
163 | |||
164 | 1 | Александр Александров | h3. Какие элементы необходимы для минимального POM? |
165 | 2 | Александр Александров | |
166 | Требуемые элементы для минимального POM ето корневий елемент, modelVersion, GroupID, artifactID и версия. Минимальный POM файл: |
||
167 | |||
168 | {{dmsf_image(348)}} |
||
169 | |||
170 | 1 | Александр Александров | h3. Что такое зависимости в Maven? |
171 | 2 | Александр Александров | |
172 | Зависимость (dependency) - это те библиотеки, которые непосредственно используются в вашем проекте для компиляции кода или его тестирования. |
||
173 | |||
174 | 1 | Александр Александров | h3. Что такое артефакт в Maven? |
175 | 2 | Александр Александров | |
176 | Артефакт (artefact) - это, по сути, любая библиотека, хранящаяся в репозитории (месте хранения). Это может быть какая-то зависимость или плагин. Обычно артефактом является JAR-файл, который хранится в репозитории Maven. Каждый артефакт содержит group ID, artifact ID и версию. |
||
177 | |||
178 | 1 | Александр Александров | h3. Что такое плагин в Maven? |
179 | 2 | Александр Александров | |
180 | Плагин (plugin) - это зависимости Maven'а, расширяющие его функционал. |
||
181 | |||
182 | 1 | Александр Александров | h3. Что такое задача в Maven? |
183 | 2 | Александр Александров | |
184 | Задача (goal) - это специальная задача, которая относится к сборке проекта и его управлению. Она может привязываться как к нескольким фазам, так и ни к одной. Задача, которая не привязана ни к одной фазе, может быть запущена вне фаз сборки с помощью прямого вызова. |
||
185 | |||
186 | 1 | Александр Александров | h3. Что такое архетип в Maven? |
187 | 2 | Александр Александров | |
188 | Архетип (archetype) - это некая стандартная компоновка файлов и каталогов в проектах различного рода (веб, swing-проекты и прочие). Другими словами, Maven знает, как обычно строятся проекты и в соответствии с архетипом создает структуру каталогов. |
||
189 | |||
190 | 1 | Александр Александров | h3. Что такое репозиторий в Maven? |
191 | 2 | Александр Александров | |
192 | Репозиторий (repository) - глобальное хранилище всех библиотек, доступных для Maven, это место где хранятся артефакты: jar файлы, pom-файлы, javadoc, исходники, плагины. |
||
193 | |||
194 | 1 | Александр Александров | h3. Какие типы репозитория существуют в Maven? |
195 | 2 | Александр Александров | |
196 | В Maven существуют три типы репозитория: |
||
197 | |||
198 | * Локальный (local) репозиторий - это директория, которая хранится на нашем компьютере. Она создаётся в момент первого выполнения любой команды Maven. По умолчанию она расположена в <home директория>/.m2/repository - персональная для каждого пользователя. |
||
199 | * Центральный (central) репозиторий - это репозиториий, который обеспечивается сообществом Maven. Он содержит огромное количество часто используемых библиотек. Который расположен в http://repo1.maven.org/maven2/ и доступен на чтение для всех пользователей в интернете. Если Maven не может найти зависимости в локальном репозитории, то автоматически начинается поиск необходимых файлов в центральном репозитории |
||
200 | * Удалённые (remote) репозиторий - иногда, Maven не может найти необходимые зависимости в центральном репозитории. В этом случае, процесс сборки прерывается и в консоль выводится сообщение об ошибке. Для того, чтобы предотвратить подобную ситуацию, в Maven предусмотрен механизм Удалённого репозитория, который является репозиторием, который определяется самим разработчиком. Там могут храниться все необходимые зависимости. |
||
201 | |||
202 | 1 | Александр Александров | h3. Какая команда устанавливает JAR-файл в локальное хранилище? |
203 | 2 | Александр Александров | |
204 | mvn install |
||
205 | |||
206 | 1 | Александр Александров | h3. Какой порядок поиска зависимостей Maven? |
207 | 2 | Александр Александров | |
208 | Когда мы выполняем собрку проекта в Maven, автоматически начинается поиск необходимых зависимостей в следующем порядке: |
||
209 | |||
210 | # Поиск зависимостей в локальном репозитории Если зависимости не обнаружены, происходит переход к шагу 2. |
||
211 | # Поиск зависимостей в центральном репозитории. Если они не обнаружены и удалённый репозиторий определён, то происходит переход к шагу 4. |
||
212 | # Если удалённый репозиторий не определён, то процесс сборки прекращается и выводится сообщение об ошибке. |
||
213 | # Поиск зависимостей на удалённом репозитории, если они найдены, то происходит их загрузка в локальный репозиторий, если нет - выводится сообщение об ошибке. |
||
214 | |||
215 | 1 | Александр Александров | h3. Какие два файла настройки есть в Maven, как они называются и где расположены? |
216 | 2 | Александр Александров | |
217 | В Maven, файлы настройки называются settings.xml, и они расположены в двох местах: |
||
218 | |||
219 | * Каталог где установлен Maven: $M2_Home/conf/settings.xml |
||
220 | * Домашняя директория пользователя: ${user.home}/.m2/settings.xml |
||
221 | |||
222 | 1 | Александр Александров | h3. Что такое жизненный цикл сборки в Maven? |
223 | 2 | Александр Александров | |
224 | Жизненный цикл сборки(Lifecycle) - это чётко опредлённая последовательность фаз во время выполнения которых должын быть достигнуты определённые цели. Здесь фаза представляет собой стадию жизненного цикла. |
||
225 | |||
226 | 1 | Александр Александров | h3. Назовите основные фазы жизненного цикла сборки Maven? |
227 | 2 | Александр Александров | |
228 | Когда Maven начинает сборку проекта, он проходит через определённую последовательность фаз сборки, и выполняет определенные задачи, которые указаны в каждой из фаз. |
||
229 | В Maven есть следующие 3 стандартных жизненных цикла: |
||
230 | |||
231 | * Очистка (clean) - очищает артефакты, созданные до сборки. |
||
232 | * Сборка (default or build) - используется для создания приложения. |
||
233 | * Создание сайта проекта (site) - генерирует документацию сайта для проекта. |
||
234 | |||
235 | 1 | Александр Александров | h3. Что делает команда mvn site? |
236 | 2 | Александр Александров | |
237 | mvn site - создает веб-сайт проекта. |
||
238 | |||
239 | 1 | Александр Александров | h3. Что делает команда mvn clean? |
240 | 2 | Александр Александров | |
241 | mvn clean - эта команда очищает целевую директорию от созданных в процессе сборки файлов. |
||
242 | |||
243 | 1 | Александр Александров | h3. Из каких фаз состоит жизненный цикл сборки Clean? |
244 | h3. Из каких фаз состоит жизненный цикл сборки Default (Build)? |
||
245 | h3. Из каких фаз состоит жизненный цикл сборки Site? |
||
246 | h3. Что сделает эта команда "mvn clean dependency:copy-dependencies package"? |
||
247 | h3. Что такое профиль сборки (Build ProÙle)? |
||
248 | h3. Какие типы профилей сборки (Build ProÙles) вы знаете? |
||
249 | h3. Как вы можете активировать профили сборки? |
||
250 | h3. Для чего используются Maven плагины? |
||
251 | h3. Какие типы плагинов существуют в Maven? |
||
252 | h3. Когда Maven использует внешние зависимости? |
||
253 | h3. Что нужно определить для внешней зависимости? |
||
254 | h3. Какая команда создает новый проект на основе архетипа? |
||
255 | h3. Что такое SNAPSHOT в Maven? |
||
256 | h3. В чем разница между snapshot и версией? |
||
257 | h3. Что такое транзитивная зависимость в Maven? |
||
258 | h3. множественный вариант выбора? |
||
259 | h3. Что такое область видимости зависимостей (dependency scope)? Назовите значения dependency scope. |
||
260 | h3. Какой минимальный набор информации нужен для сопоставления ссылки зависимостей на раздел dependencyManagement? |
||
261 | h3. Как сослаться на свойство(property) определенное в файле pom.xml? |
||
262 | h3. Для чего нужен элемент <execution> в POM файле? |
||
263 | h3. Каким образом можно исключить зависимость в Maven? |
||
264 | h3. Что является полным именем артефакта? |
||
265 | h3. Если вы не определяете никакой информации, где же ваш POM унаследует ее? |
||
266 | h3. При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. |
||
267 | h3. Можете ли вы собрать проект без интернета? |
||
268 | h3. Если при сборке проекта в тестах произошла ошибка. Как собрать проект без запуска тестов? |
||
269 | h3. Как запустить только один тест? |
||
270 | h3. Как остановить распространение наследования плагинов для дочерних POM? |
||
271 | h3. Какие теги pom.xml вы знаете. |