Ответы на вопросы на собеседование Maven (часть 1).
- Что такое сборка проекта, автоматизация сборки?
Сборка (англ. assembly) - двоичный файл, содержащий исполняемый код программы или другой, подготовленный для использования информационный продукт.
Автоматизация сборки - этап написания скриптов или автоматизация широкого спектра задач применительно к ПО, применяемому разработчиками в их повседневной деятельности, включая такие действия, как:
- Компиляция исходного кода в бинарный код
- Сборка бинарного кода
- Выполнение тестов
- Разворачивание программы на производственной платформе
- Написание сопроводительной документации или описание изменений новой версии
- Что такое Maven? Как он работает?
Apache Maven - это фреймворк для автоматизации сборки проектов, компиляции, создания jar, создания дистрибутива программы, генерации документации. Если собирать большие проекты с командной строки, то команда для сборки будет очень длинной, поэтому её иногда записывают в bat/sh скрипт. Но такие скрипты зависят от платформы. Для того чтобы избавиться от этой зависимостии и упростить написание скрипта используют инструменты для сборки проекта.
Maven, обеспечивает декларативную, а не императивную сборку проекта. То есть, в файлах проекта pom.xml содержится его декларативное описание, а не отдельные команды. Все задачи по обработке файлов Maven выполняется через плагины.
- Какие преимущества Maven?
Основные преимущества Maven:
- Независимость от OS. Сборка проекта происходит в любой операционной системе. Файл проекта один и тот же.
- Управление зависимостями. Редко какие проекты пишутся без использования сторонних библиотек(зависимостей). Эти сторонние библиотеки зачастую тоже в свою очередь используют библиотеки разных версий. Maven позволяет управлять такими сложными зависимостями. Что позволяет разрешать конфликты версий и в случае необходимости легко переходить на новые версии библиотек.
- Возможна сборка из командной строки. Такое часто необходимо для автоматической сборки проекта на сервере (Continuous Integration).
- Хорошая интеграция со средами разработки. Основные среды разработки на java легко открывают проекты которые собираются c помощью maven. При этом зачастую проект настраивать не нужно - он сразу готов к дальнейшей разработке.
- Как следствие - если с проектом работают в разных средах разработки, то maven удобный способ хранения настроек. Настроечный файл среды разработки и для сборки один и тот же - меньше дублирования данных и соответственно ошибок.
- Декларативное описание проекта.
- Какие недостатки Maven?
Недостатки Maven:
- Неочевидность. Если в Ant указывается команда на удаление - и удаляется файл, то в случае Maven надо всем сердцем довериться плагину и документации по нему.
- При таком объёме необходимых знаний документации не так много, особенно по каким-то специальным моментам. Да и просто читать придётся много. Порог вхождения, если потребуется собирать даже не самое сложное приложение куда выше, чем у Ant.
- Если нужно найти какой-то специальный плагин - это будет сделать непросто, плагинов много. И не факт, что найденный подойдёт на все 100% и будет работать без ошибок.
- Нужен доступ в интернет (или придётся разворачивать собственный репозиторий, что трудоёмко)
- Большие трудности, если проект не типовий.
- Какими аспектами управляет Maven?
Вот основные аспекты, которыми позволяет управлять Maven:
- Создание (Build)
- Документирование (Documentation)
- Отчёты (Reporting)
- Зависимости (Dependencies)
- Релизы (Releases)
- SCM
- Список рассылки (Mailing list)
- Дистрибьюция (Distribution)
- Как узнать какую версию Maven вы используете?
С помощью следующий команди:
mvn --version
- Для чего создан Maven?
Основной целью Maven является предоставление разработчику:
- Понятной модели для проектов, которая может быть использовано повторно и была бы проста в поддержании.
- Плагины, которые могут взаимодействовать с этой моделью.
Структура и сожержание проекта Maven указывается в специальном xml-файле, который назывется Project Object Model (POM), который является базовым модулем всей системы.
- Какая структура каталогов в Maven?
В Maven стандартная структура каталогов, благодаря ей отпадает необходимость прописывать пути к файлам проекта. В корневом каталоге проекта находится pom.xml и несколько текстовых файлов. Всё остальное хозяйство аккуратно разложено в подкаталогах. Главные из них - src и target. Однако, порядок сохраняется и вглубь:
- Где вы хранятся файлы классов при компиляции проекта Maven?
Файлы классов хранятся в: ${basedir}/target/classes/.
- Что такое pom.xml?
pom.xml - это XML-файл, который содержит информацию о деталях проекта, и конфигурации используемых для создания проекта на Maven. Он всегда находится в базовом каталоге проекта. Этот файл также содержит задачи и плагины. Во время выполнения задач, Maven ищет файл pom.xml в базовой директории проекта. Он читает его и получает необходимую информацию, после чего выполняет задачи.
Корневой элемент <project>, схема, которая облегчает редактирование и проверку, и версия pom.xml. Внутри тега project содержится основная и обязательная информация о проекте.
- Какую информацию содержит pom.xml?
Среди информации которую содержит pom.xml мы можем выделить следующие:
- Зависимости проекта (project dependencies)
- Плагины (plugins)
- Задачи/цели (goals)
- Профиль создания (build profiles)
- Версия проекта (project version)
- Разработчики (developers)
- Список рассылки (mailing list)
- Что такое супер POM?
Все POM - файлы являются наследниками родительского pom.xml. Этот POM-файл называется Super POM и содержит значения, унаследованные по умолчанию.
- Какие элементы необходимы для минимального POM?
Требуемые элементы для минимального POM ето корневий елемент, modelVersion, GroupID, artifactID и версия. Минимальный POM файл:
- Что такое зависимости в Maven?
Зависимость (dependency) - это те библиотеки, которые непосредственно используются в вашем проекте для компиляции кода или его тестирования.
- Что такое артефакт в Maven?
Артефакт (artefact) - это, по сути, любая библиотека, хранящаяся в репозитории (месте хранения). Это может быть какая-то зависимость или плагин. Обычно артефактом является JAR-файл, который хранится в репозитории Maven. Каждый артефакт содержит group ID, artifact ID и версию.
- Что такое плагин в Maven?
Плагин (plugin) - это зависимости Maven'а, расширяющие его функционал.
- Что такое задача в Maven?
Задача (goal) - это специальная задача, которая относится к сборке проекта и его управлению. Она может привязываться как к нескольким фазам, так и ни к одной. Задача, которая не привязана ни к одной фазе, может быть запущена вне фаз сборки с помощью прямого вызова.
- Что такое архетип в Maven?
Архетип (archetype) - это некая стандартная компоновка файлов и каталогов в проектах различного рода (веб, swing-проекты и прочие). Другими словами, Maven знает, как обычно строятся проекты и в соответствии с архетипом создает структуру каталогов.
- Что такое репозиторий в Maven?
Репозиторий (repository) - глобальное хранилище всех библиотек, доступных для Maven, это место где хранятся артефакты: jar файлы, pom-файлы, javadoc, исходники, плагины.
- Какие типы репозитория существуют в Maven?
В Maven существуют три типы репозитория:
- Локальный (local) репозиторий - это директория, которая хранится на нашем компьютере. Она создаётся в момент первого выполнения любой команды Maven. По умолчанию она расположена в <home директория>/.m2/repository - персональная для каждого пользователя.
- Центральный (central) репозиторий - это репозиториий, который обеспечивается сообществом Maven. Он содержит огромное количество часто используемых библиотек. Который расположен в http://repo1.maven.org/maven2/ и доступен на чтение для всех пользователей в интернете. Если Maven не может найти зависимости в локальном репозитории, то автоматически начинается поиск необходимых файлов в центральном репозитории
- Удалённые (remote) репозиторий - иногда, Maven не может найти необходимые зависимости в центральном репозитории. В этом случае, процесс сборки прерывается и в консоль выводится сообщение об ошибке. Для того, чтобы предотвратить подобную ситуацию, в Maven предусмотрен механизм Удалённого репозитория, который является репозиторием, который определяется самим разработчиком. Там могут храниться все необходимые зависимости.
- Какая команда установляет JAR-файл в локальное хранилище?
mvn install
- Какой порядок поиска зависимостей Maven?
Когда мы выполняем собрку проекта в Maven, автоматически начинается поиск необходимых зависимостей в следующем порядке:
- Поиск зависимостей в локальном репозитории Если зависимости не обнаружены, происходит переход к шагу 2.
- Поиск зависимостей в центральном репозитории. Если они не обнаружены и удалённый репозиторий определён, то происходит переход к шагу 4.
- Если удалённый репозиторий не определён, то процесс сборки прекращается и выводится сообщение об ошибке.
- Поиск зависимостей на удалённом репозитории, если они найдены, то происходит их загрузка в локальный репозиторий, если нет - выводится сообщение об ошибке.
- Какие два файла настройки есть в Maven, как они называются и где расположены?
В Maven, файлы настройки называются settings.xml, и они расположены в двох местах:
- Каталог где установлен Maven: $M2_Home/conf/settings.xml
- Домашняя директория пользователя: ${user.home}/.m2/settings.xml
- Что такое жизненный цикл сборки в Maven?
Жизненный цикл сборки(Lifecycle) - это чётко опредлённая последовательность фаз во время выполнения которых должын быть достигнуты определённые цели. Здесь фаза представляет собой стадию жизненного цикла.
- Назовите основные фазы жизненного цикла сборки Maven?
Когда Maven начинает сборку проекта, он проходит через определённую последовательность фаз сборки, и выполняет определенные задачи, которые указаны в каждой из фаз.
В Maven есть следующие 3 стандартных жизненных цикла:
- Очистка (clean) - очищает артефакты, созданные до сборки.
- Сборка (default or build) - используется для создания приложения.
- Создание сайта проекта (site) - генерирует документацию сайта для проекта.
- Что делает команда mvn site?
mvn site - создает веб-сайт проекта.
- Что делает команда mvn clean?
mvn clean - эта команда очищает целевую директорию от созданных в процессе сборки файлов.
Мне интересно автор читал что написал? Ошибок в словах выше крыши, хотя и не критично.
ОтветитьУдалитьДА уж, количество ошибок просто жесть. Неужели сложно прогнать проверку текста?
ОтветитьУдалить