Проект

Общее

Профиль

MAVEN » История » Версия 3

Александр Александров, 25.04.2019 12:01

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 3 Александр Александров
# Что такое профиль сборки (Build Profile)?
37
# Какие типы профилей сборки (Build Profiles) вы знаете?
38 1 Александр Александров
# Как вы можете активировать профили сборки?
39
# Для чего используются Maven плагины?
40
# Какие типы плагинов существуют в Maven?
41
# Когда Maven использует внешние зависимости?
42
# Что нужно определить для внешней зависимости?
43
# Какая команда создает новый проект на основе архетипа?
44
# Что такое SNAPSHOT в Maven?
45
# В чем разница между snapshot и версией?
46 3 Александр Александров
№ Как Maven определяет какую версию зависимостей использовать когда встречается множественный вариант выбора?
47 1 Александр Александров
# Что такое область видимости зависимостей (dependency scope)? Назовите значения dependency scope.
48
# Какой минимальный набор информации нужен для сопоставления ссылки зависимостей на раздел dependencyManagement?
49
# Как сослаться на свойство(property) определенное в файле pom.xml?
50
# Для чего нужен элемент <execution> в POM файле?
51
# Каким образом можно исключить зависимость в Maven?
52
# Что является полным именем артефакта?
53
# Если вы не определяете никакой информации, где же ваш POM унаследует ее?
54 3 Александр Александров
# При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. Можете ли вы собрать проект без интернета?
55 1 Александр Александров
# Если при сборке проекта в тестах произошла ошибка. Как собрать проект без запуска тестов?
56
# Как запустить только один тест?
57
# Как остановить распространение наследования плагинов для дочерних POM?
58
# Какие теги pom.xml вы знаете.
59
60
h2. Ответы
61
62
h3. Что такое сборка проекта, автоматизация сборки?
63 2 Александр Александров
64
Сборка (англ. assembly) - двоичный файл, содержащий исполняемый код программы или другой, подготовленный для использования информационный продукт.
65
Автоматизация сборки - этап написания скриптов или автоматизация широкого спектра задач применительно к ПО, применяемому разработчиками в их повседневной деятельности, включая такие действия, как:
66
67
* Компиляция исходного кода в бинарный код
68
* Сборка бинарного кода
69
* Выполнение тестов
70
* Разворачивание программы на производственной платформе
71
* Написание сопроводительной документации или описание изменений новой версии
72
73
h3. Что такое Maven? Как он работает?
74
75
Apache Maven - это фреймворк для автоматизации сборки проектов, компиляции, создания jar, создания дистрибутива программы, генерации документации. Если собирать большие проекты с командной строки, то команда для сборки будет очень длинной, поэтому её иногда записывают в bat/sh скрипт. Но такие скрипты зависят от платформы. Для того чтобы избавиться от этой зависимостии и упростить написание скрипта используют инструменты для сборки проекта. Maven, обеспечивает декларативную, а не императивную сборку проекта. То есть, в файлах проекта pom.xml содержится его декларативное описание, а не отдельные команды. Все задачи по обработке файлов Maven выполняется через плагины.
76
77 1 Александр Александров
h3. Какие преимущества Maven?
78 2 Александр Александров
79
Основные преимущества Maven:
80
81
* Независимость от OS. Сборка проекта происходит в любой операционной системе. Файл проекта один и тот же.
82
* Управление зависимостями. Редко какие проекты пишутся без использования сторонних библиотек(зависимостей). Эти сторонние библиотеки зачастую тоже в свою очередь используют библиотеки разных версий. Maven позволяет управлять такими сложными зависимостями. Что позволяет разрешать конфликты версий и в случае необходимости легко переходить на новые версии библиотек.
83
* Возможна сборка из командной строки. Такое часто необходимо для автоматической сборки проекта на сервере (Continuous Integration).
84
* Хорошая интеграция со средами разработки. Основные среды разработки на java легко открывают проекты которые собираются c помощью maven. При этом зачастую проект настраивать не нужно - он сразу готов к дальнейшей разработке.
85
* Как следствие - если с проектом работают в разных средах разработки, то maven удобный способ хранения настроек. Настроечный файл среды разработки и для сборки один и тот же - меньше дублирования данных и соответственно ошибок.
86
* Декларативное описание проекта.
87
88 1 Александр Александров
h3. Какие недостатки Maven?
89 2 Александр Александров
90
Недостатки Maven:
91
92
* Неочевидность. Если в Ant указывается команда на удаление - и удаляется файл, то в случае Maven надо всем сердцем довериться плагину и документации по нему.
93
* При таком объёме необходимых знаний документации не так много, особенно по каким-то специальным моментам. Да и просто читать придётся много. Порог вхождения, если потребуется собирать даже не самое сложное приложение куда выше, чем у Ant.
94
* Если нужно найти какой-то специальный плагин - это будет сделать непросто, плагинов много. И не факт, что найденный подойдёт на все 100% и будет работать без ошибок.
95
* Нужен доступ в интернет (или придётся разворачивать собственный репозиторий, что трудоёмко)
96
* Большие трудности, если проект не типовий.
97
98 1 Александр Александров
h3. Какими аспектами управляет Maven?
99 2 Александр Александров
100
Вот основные аспекты, которыми позволяет управлять Maven:
101
102
* Создание (Build)
103
* Документирование (Documentation)
104
* Отчёты (Reporting)
105
* Зависимости (Dependencies)
106
* Релизы (Releases)
107
* SCM
108
* Список рассылки (Mailing list)
109
* Дистрибьюция (Distribution)
110
111 1 Александр Александров
h3. Как узнать какую версию Maven вы используете?
112 2 Александр Александров
113
С помощью следующий команды:
114
115
<pre>
116
mvn --version
117
</pre>
118
119 1 Александр Александров
h3. Для чего создан Maven?
120 2 Александр Александров
121
Основной целью Maven является предоставление разработчику:
122
123
* Понятной модели для проектов, которая может быть использовано повторно и была бы проста в поддержании.
124
* Плагины, которые могут взаимодействовать с этой моделью.
125
126
Структура и сожержание проекта Maven указывается в специальном xml-файле, который назывется Project Object Model (POM), который является базовым модулем всей системы.
127
128 1 Александр Александров
h3. Какая структура каталогов в Maven?
129 2 Александр Александров
130
В Maven стандартная структура каталогов, благодаря ей отпадает необходимость прописывать пути к файлам проекта. В корневом каталоге проекта находится pom.xml и несколько текстовых файлов. Всё остальное хозяйство аккуратно разложено в подкаталогах. Главные из них - src и target. Однако, порядок сохраняется и вглубь:
131
132
{{dmsf_image(347)}}
133
134 1 Александр Александров
h3. Где вы хранятся файлы классов при компиляции проекта Maven?
135 2 Александр Александров
136
Файлы классов хранятся в: 
137
138
<pre>
139
${basedir}/target/classes/.
140
</pre>
141
142 1 Александр Александров
h3. Что такое pom.xml?
143 2 Александр Александров
144
pom.xml - это XML-файл, который содержит информацию о деталях проекта, и конфигурации используемых для создания проекта на Maven. Он всегда находится в базовом каталоге проекта. Этот файл также содержит задачи и плагины. Во время выполнения задач, Maven ищет файл pom.xml в базовой директории проекта. Он читает его и получает необходимую информацию, после чего выполняет задачи. Корневой элемент <project>, схема, которая облегчает редактирование и проверку, и версия pom.xml. Внутри тега project содержится основная и обязательная информация о проекте.
145
146 1 Александр Александров
h3. Какую информацию содержит pom.xml?
147 2 Александр Александров
148
Среди информации которую содержит pom.xml мы можем выделить следующие:
149
150
* Зависимости проекта (project dependencies)
151
* Плагины (plugins)
152
* Задачи/цели (goals)
153
* Профиль создания (build proÙles)
154
* Версия проекта (project version)
155
* Разработчики (developers)
156
* Список рассылки (mailing list)
157
158 1 Александр Александров
h3. Что такое супер POM?
159 2 Александр Александров
160
Все POM - файлы являются наследниками родительского pom.xml. Этот POM-файл называется Super POM и содержит значения, унаследованные по умолчанию.
161
162 1 Александр Александров
h3. Какие элементы необходимы для минимального POM?
163 2 Александр Александров
164
Требуемые элементы для минимального POM ето корневий елемент, modelVersion, GroupID, artifactID и версия. Минимальный POM файл:
165
166
{{dmsf_image(348)}}
167
168 1 Александр Александров
h3. Что такое зависимости в Maven?
169 2 Александр Александров
170
Зависимость (dependency) - это те библиотеки, которые непосредственно используются в вашем проекте для компиляции кода или его тестирования.
171
172 1 Александр Александров
h3. Что такое артефакт в Maven?
173 2 Александр Александров
174
Артефакт (artefact) - это, по сути, любая библиотека, хранящаяся в репозитории (месте хранения). Это может быть какая-то зависимость или плагин. Обычно артефактом является JAR-файл, который хранится в репозитории Maven. Каждый артефакт содержит group ID, artifact ID и версию.
175
176 1 Александр Александров
h3. Что такое плагин в Maven?
177 2 Александр Александров
178
Плагин (plugin) - это зависимости Maven'а, расширяющие его функционал.
179
180 1 Александр Александров
h3. Что такое задача в Maven?
181 2 Александр Александров
182
Задача (goal) - это специальная задача, которая относится к сборке проекта и его управлению. Она может привязываться как к нескольким фазам, так и ни к одной. Задача, которая не привязана ни к одной фазе, может быть запущена вне фаз сборки с помощью прямого вызова.
183
184 1 Александр Александров
h3. Что такое архетип в Maven?
185 2 Александр Александров
186
Архетип (archetype) - это некая стандартная компоновка файлов и каталогов в проектах различного рода (веб, swing-проекты и прочие). Другими словами, Maven знает, как обычно строятся проекты и в соответствии с архетипом создает структуру каталогов.
187
188 1 Александр Александров
h3. Что такое репозиторий в Maven?
189 2 Александр Александров
190
Репозиторий (repository) - глобальное хранилище всех библиотек, доступных для Maven, это место где хранятся артефакты: jar файлы, pom-файлы, javadoc, исходники, плагины.
191
192 1 Александр Александров
h3. Какие типы репозитория существуют в Maven?
193 2 Александр Александров
194
В Maven существуют три типы репозитория:
195
196
* Локальный (local) репозиторий - это директория, которая хранится на нашем компьютере. Она создаётся в момент первого выполнения любой команды Maven. По умолчанию она расположена в <home директория>/.m2/repository - персональная для каждого пользователя.
197
* Центральный (central) репозиторий - это репозиториий, который обеспечивается сообществом Maven. Он содержит огромное количество часто используемых библиотек. Который расположен в http://repo1.maven.org/maven2/ и доступен на чтение для всех пользователей в интернете. Если Maven не может найти зависимости в локальном репозитории, то автоматически начинается поиск необходимых файлов в центральном репозитории
198
* Удалённые (remote) репозиторий - иногда, Maven не может найти необходимые зависимости в центральном репозитории. В этом случае, процесс сборки прерывается и в консоль выводится сообщение об ошибке. Для того, чтобы предотвратить подобную ситуацию, в Maven предусмотрен механизм Удалённого репозитория, который является репозиторием, который определяется самим разработчиком. Там могут храниться все необходимые зависимости.
199
200 1 Александр Александров
h3. Какая команда устанавливает JAR-файл в локальное хранилище?
201 2 Александр Александров
202
mvn install
203
204 1 Александр Александров
h3. Какой порядок поиска зависимостей Maven?
205 2 Александр Александров
206
Когда мы выполняем собрку проекта в Maven, автоматически начинается поиск необходимых зависимостей в следующем порядке:
207
208
# Поиск зависимостей в локальном репозитории Если зависимости не обнаружены, происходит переход к шагу 2.
209
# Поиск зависимостей в центральном репозитории. Если они не обнаружены и удалённый репозиторий определён, то происходит переход к шагу 4.
210
# Если удалённый репозиторий не определён, то процесс сборки прекращается и выводится сообщение об ошибке.
211
# Поиск зависимостей на удалённом репозитории, если они найдены, то происходит их загрузка в локальный репозиторий, если нет - выводится сообщение об ошибке.
212
213 1 Александр Александров
h3. Какие два файла настройки есть в Maven, как они называются и где расположены?
214 2 Александр Александров
215
В Maven, файлы настройки называются settings.xml, и они расположены в двох местах:
216
217
* Каталог где установлен Maven: $M2_Home/conf/settings.xml
218
* Домашняя директория пользователя: ${user.home}/.m2/settings.xml
219
220 1 Александр Александров
h3. Что такое жизненный цикл сборки в Maven?
221 2 Александр Александров
222
Жизненный цикл сборки(Lifecycle) - это чётко опредлённая последовательность фаз во время выполнения которых должын быть достигнуты определённые цели. Здесь фаза представляет собой стадию жизненного цикла.
223
224 1 Александр Александров
h3. Назовите основные фазы жизненного цикла сборки Maven?
225 2 Александр Александров
226
Когда Maven начинает сборку проекта, он проходит через определённую последовательность фаз сборки, и выполняет определенные задачи, которые указаны в каждой из фаз.
227
В Maven есть следующие 3 стандартных жизненных цикла:
228
229
* Очистка (clean) - очищает артефакты, созданные до сборки.
230
* Сборка (default or build) - используется для создания приложения.
231
* Создание сайта проекта (site) - генерирует документацию сайта для проекта.
232
233 1 Александр Александров
h3. Что делает команда mvn site?
234 2 Александр Александров
235
mvn site - создает веб-сайт проекта.
236 1 Александр Александров
237
h3. Что делает команда mvn clean?
238
239
mvn clean - эта команда очищает целевую директорию от созданных в процессе сборки файлов.
240
241
h3. Из каких фаз состоит жизненный цикл сборки Clean?
242 3 Александр Александров
243
Жизненный цикл сборки Clean состоит из следующих этапов:
244
245
* pre-clean
246
* clean
247
* post-clean
248
249 1 Александр Александров
h3. Из каких фаз состоит жизненный цикл сборки Default (Build)?
250 3 Александр Александров
251
Default (Build) - это основной жизненный цикл Maven, который используется для сборки проектов. Он включает в себя 23 фазы:
252
253
* validate - проверяет корректность метаинформации о проекте, подтверждает, является ли проект корректным и вся ли необходимая информация доступа для завершения процесса сборки.
254
* initialize - инициализирует состояние сборки, например, различные настройки. generate-sources - включает любой исходный код в фазу компиляции.
255
* generate-sources - включает любой исходный код в фазу компиляции.
256
* process-sources - обрабатывает исходный код (подготавливает). Например, фильтрует определённые значения.
257
* generate-resources - генерирует ресурсы, которые должны быть включены в пакет.
258
* process-resources - копирует и отправляет ресурсы в указанную директори. Это фаза перед упаковкой.
259
* compile - комплирует исходный код проекта.
260
* process-classes - обработка файлов, полученных в результате компляции. Например, оптимизация байт-кода Java классов.
261
* generate-test-sources - генерирует любые тестовые ресурсы, которые должны быть включены в фазу компиляции.
262
* process-test-sources - обрабатывает исходный код тестов. Например, фильтрует значения.
263
* test-compile - компилирует исходный код тестов в указанную директорию тестов.
264
* process-test-classes - обрабатывает файлы, полученные в результате компиляции исходного кода тестов.
265
* test - запускает тесты классов, используя приемлемый фреймворк юниттестирования (например, Junit).
266
* prepare-package - выполняет все необходимые операции для подготовки пакета, непосредственно перед упаковкой.
267
* package - преобразует скомпилированный код и пакет в дистрибутивный формат. Такие как JAR, WAR или EAR.
268
* pre-integration-test - выполняет необходимые действия перед выполнением интеграционных тестов.
269
* integration-test - обрабатывает и распаковывает пакет, если необходимо, в среду, где будут выполняться интеграционные тесты.
270
* post-integration-test - выполняет действия, необходимые после выполнения интеграционных тестов. Например, освобождение ресурсов.
271
* verify - выполняет любые проверки для подтверждения того, что пакет пригоден и отвечает критериям качества.
272
* install - переносит пакет в локальный репозиторий, откуда он будет доступен для использования как зависимость в других проектах.
273
* deploy - копирует финальный пакет (архив) в удалённый репозиторий для, того, чтобы сделать его доступным другим разработчикам и проектам.
274
275
Здесь также необходимо уточнить два момента:
276
277
* Когда мы выполняем команду Maven, например install, то будут выполенны фазы до install и фаза install.
278
* Различные задачи Maven будут привязаны к различным фазам жизненнго цикла Maven в зависимости от типа архива (JAR/WAR/EAR).
279
280 1 Александр Александров
h3. Из каких фаз состоит жизненный цикл сборки Site?
281 3 Александр Александров
282
Жизненный цикл сборки Site состоит из следующих этапов:
283
284
* pre-site
285
* site
286
* post-site
287
* site-deploy
288
289 1 Александр Александров
h3. Что сделает эта команда "mvn clean dependency:copy-dependencies package"?
290 3 Александр Александров
291
Порядок выполнения зависит от порядка вызова целей и фаз. Рассмотрим данную команду. Аргументы clean и package являются фазами сборки до тех пор, пока "dependency:copy-dependencies" является задачей. В этом случае, сначала будет выполнена фаза clean, после этого будет выполнена задача "dependency:copydependencies". После чего будет выполнена фаза package.
292
293
h3. Что такое профиль сборки (Build Profile)?
294
295
Профиль сборки - это множество настроек, которые могут быть использованы для установки или перезаписи стандартных значений сборки Maven. Используя профиль сборки Maven, мы можем настраивать сборку для различных окружений, таких как:
296
297
* Разработка или Продакшн.
298
* Профили настраиваются в файле pom.xml с помощью элементов activeProfiles /profiles и запускаются различными методами.
299
300
h3. Какие типы профилей сборки (Build Profiles) вы знаете?
301
302
В Maven существует три основных типа профилей сборки:
303
304
* Per Project - определяется в POM файле, pom.xml
305
* Per User - определяется в настройках Maven - xml файл (%USER_HOME%/.m2/settings.xml).
306
* Global - определяется в глобальных настройках - xml файл (%M2_HOME%/conf/settings.xml).
307
308 1 Александр Александров
h3. Как вы можете активировать профили сборки?
309 3 Александр Александров
310
Профиль сборки Maven может быть активирован различными способами:
311
312
* Использованием команды в консоли.
313
* С помощью настроек Maven.
314
* С помощью переменных окружения.
315
* Настройках ОС.
316
* Существующими, отсутствующими файлами.
317
318 1 Александр Александров
h3. Для чего используются Maven плагины?
319 3 Александр Александров
320
Maven плагины используются для:
321
322
* Создания jar – файла.
323
* Создания war – файла.
324
* Компиляции кода файлов.
325
* Юнит-тестирования кода.
326
* Создание отчётов проекта.
327
328 1 Александр Александров
h3. Какие типы плагинов существуют в Maven?
329 3 Александр Александров
330
В Maven существует два типа плагинов:
331
332
* Плагины сборки (Build plugins) - выполняются в процессе сборки и должны быть конфигурированны внутри блока <build></build> файла pom.xml.
333
* Плагины отчётов (Reporting plugins) - выполняются в процесса генерирования сайта и должны быть конфигурированны внутри блока <reporting></reporting> файла pom.xml.
334
335 1 Александр Александров
h3. Когда Maven использует внешние зависимости?
336 3 Александр Александров
337
Если необходимые файлы не найдены ни в центральном, ни на удалённом репозитории, тогда для решения этой проблемы используются внешние зависимости.
338
339 1 Александр Александров
h3. Что нужно определить для внешней зависимости?
340 3 Александр Александров
341
Внешние зависимости могут быть сконфигурированы в файле pom.xml таким же образом, как и другие зависимости, для этого:
342
343
* Определите groupId таким же именем, как и имя файла.
344
* Определите artifactId таким же именем, как и имя файла.
345
* Определите область видимости зависимости, как system.
346
* Укажите абсолютный путь к файлу.
347
348 1 Александр Александров
h3. Какая команда создает новый проект на основе архетипа?
349 3 Александр Александров
350
Переходим в нужную нам директорию и выполняем в терминале следющую команду: 
351
352
<pre>
353
mvn archetype:generate
354
</pre>
355
356 1 Александр Александров
h3. Что такое SNAPSHOT в Maven?
357 3 Александр Александров
358
SNAPSHOT - это специальная версия, которая показывает текущую рабочую копию. При каждой сборке Maven проверяет наличие новой snapshot версии на удалённом репозитории.
359
360 1 Александр Александров
h3. В чем разница между snapshot и версией?
361 3 Александр Александров
362
В случае с версией, если Maven однажды загрузил версию data-service:1.0, то он больше не будет пытаться загрузить новую версию 1.0 из репозитория. Для того, чтобы скачать обновлённый продукт data-service должен быть обновлён до версии 1.1.
363
364
В случае со snapshot, Maven автоматически будет подтягивать крайний snapshot (data-service:1.0-SNAPSHOT) каждый раз, когда будет выполнятся сборка проекта.
365
366
Транзитивная зависимость - позволяет избегать необходимости изучать и указывать библиотеки, которые требуются для самой зависимости, и включает их автоматически. Необходимые библиотеки подгружаются в проект автоматически. При разрешении конфликта версий используется принцип «ближайшей» зависимости, то есть выбирается зависимость, путь к которой через список зависимых проектов является наиболее коротким.
367
368
h3. Как Maven определяет какую версию зависимостей использовать когда встречается множественный вариант выбора?
369
370
Dependency mediation - определяет, какая версия зависимости будет использоваться, когда встречается несколько версий артефактов, если две версии зависимости на той же глубине в дереве зависимостей, то будет использоваться та которая объявлена первой. Здесь важен порядок объявления: первое объявление выигрывает.
371
372 1 Александр Александров
h3. Что такое область видимости зависимостей (dependency scope)? Назовите значения dependency scope.
373 3 Александр Александров
374
Существует 6 областей:
375
376
* compile - это область по умолчанию, использутся, если ничего больше не определено. Compile зависимости доступны во всех classpath проекта.
377
* provided - это очень похоже на compile, но указывает на то, что вы ожидаете от JDK или контейнера предоставить зависимость в ходе выполнения. Эта область доступна только на compilation и test classpath и не является транзитивной.
378
* runtime - эта область указывает на то, что зависимость не обязательна для compilation, но для фаз выполнения.
379
* test - эта область указывает, что зависимость не обязательна для нормального использования приложения.
380
* system - эта область похожа на provided за исключением того, что вы предоставляете JAR. Артефакт всегда доступен и не смотрит в репозиторий.
381
* import - эта область используется в зависимости типа pom в <dependencyManagement> разделе. Это указывает на то, что определенный POM будет заменен зависимостями в этом POM <dependencyManagement> разделе.
382
383 1 Александр Александров
h3. Какой минимальный набор информации нужен для сопоставления ссылки зависимостей на раздел dependencyManagement?
384 3 Александр Александров
385
Минимальный набор информации такой {groupId, artifactId, type, classifier}
386
387 1 Александр Александров
h3. Как сослаться на свойство(property) определенное в файле pom.xml?
388 3 Александр Александров
389
На все свойства в pom.xml, можно сослаться с помощью префиксов "project." или
390
"pom." Ниже приведёт пример некоторых часто используемых элементов.
391
392
* ${project.build.directory} - "target" директория, или тоже самое
393
* ${pom.project.build.directory}.
394
* ${project.build.outputDirectory} - путь к директории куда компилятор складывает файлы по умолчанию "target/classes".
395
* ${project.name} или ${pom.name} - имя проекта.
396
* ${project.version} или ${pom.version} - версия проекта.
397
398 1 Александр Александров
h3. Для чего нужен элемент <execution> в POM файле?
399 3 Александр Александров
400
Элемент <execution> содержит информацию, необходимую для выполнения плагина.
401
402 1 Александр Александров
h3. Каким образом можно исключить зависимость в Maven?
403 3 Александр Александров
404
Файл описания проекта предусматривает возможность исключить зависимость в случае обнаружения цикличности или отсутствия необходимости в определённой библиотеке. Зависимость может быть исключена используя элемент exclusion.
405
406 1 Александр Александров
h3. Что является полным именем артефакта?
407 3 Александр Александров
408
<pre>
409
<groupId>:<artifactId>:<version>
410
</pre>
411
412 1 Александр Александров
h3. Если вы не определяете никакой информации, где же ваш POM унаследует ее?
413 3 Александр Александров
414
Все POM-и наследуются от родителя (несмотря на то явно определен он или нет). Это базовий POM известний как супер POM, он содержит значения, которие наследуются по умолчанию.
415
416
h3. При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. Можете ли вы собрать проект без интернета?
417
418
Да, можете, но если в вашем локальном репозитории есть все необходимые для сборки артефакты.
419
420 1 Александр Александров
h3. Если при сборке проекта в тестах произошла ошибка. Как собрать проект без запуска тестов?
421 3 Александр Александров
422
Для запуска сборки без выполнения тестов добавьте -Dmaven.test.skip=true к команде в строке запуска maven: 
423
424
<pre>
425
mvn install -Dmaven.test.skip=true
426
</pre>
427
428 1 Александр Александров
h3. Как запустить только один тест?
429 3 Александр Александров
430
Для запуска только одного теста добавьте -Dtest=[Имя класса] к команде в строке запуска maven. Например:
431
432
<pre>
433
mvn install -Dtest=org.apache.maven.utils.ConverterTest
434
</pre>
435
436 1 Александр Александров
h3. Как остановить распространение наследования плагинов для дочерних POM?
437 3 Александр Александров
438
Установить <inherited> в false.
439
440 1 Александр Александров
h3. Какие теги pom.xml вы знаете.
441 3 Александр Александров
442
Вот некоторые из них:
443
444
* project - описывает проект, это элемент верхнего уровня во всех файлах pom.xml.
445
* groupId - по-сути, это имя пакета. Полностью отражается в структуре каталогов.
446
* artifactId - название проекта. В структуре каталогов не отображается.
447
* version - версия проекта.
448
* packaging - определяет, какой тип файла будет собран. Варианты: pom, jar, war, ear.
449
* dependencies - указываются зависимости.
450
* build - информация о сборке проекта.
451
* name - это уже необязательные описания проекта. В данном случае его название.
452
* description - элемент представляет собой общее описание вашего проекта. Это часто используется в генерации документации Maven.
453
* url - интернет-страница проекта.
454
* repositories - репозитории для артефактов.
455
* pluginRepositories - репозитории для плагинов Maven.
Go to top