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. |