Проект

Общее

Профиль

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 вы знаете.
Go to top