Что такое Apache Maven и для чего он нужен?
Что проверяют
Понимаете ли вы, как собирается ваш же проект, или сборка для вас это кнопка в среде разработки. За вопросом обычно идут зависимости: откуда они берутся, что делать с конфликтом версий и почему локально всё собирается, а на агенте сборки нет.
Как отвечать
Maven это система сборки и управления зависимостями для проектов на JVM, построенная на соглашениях. Проект описан в pom.xml: координаты (groupId, artifactId, version), зависимости, плагины, свойства, родитель.
Что он даёт:
Единая структура каталогов и жизненный цикл сборки: validate, compile, test, package, verify, install, deploy. Команда запускает фазу, а работу делают привязанные к ней цели плагинов, поэтому package и install отличаются не сборкой, а тем, кладётся ли артефакт в локальный репозиторий.
Транзитивные зависимости: достаточно объявить библиотеку, её собственные зависимости подтянутся. Конфликт версий Maven решает правилом ближайшего объявления в дереве, а не выбором самой свежей версии.
Области видимости compile, provided, runtime и test определяют, попадёт ли библиотека в артефакт и будет ли видна тестам.
Управление версиями в одном месте через dependencyManagement и импорт BOM, профили под окружения, повторяемость сборки за счёт того же pom у всех.
Где спотыкаются
Не различают фазу и цель. Из-за этого не могут объяснить, что именно делает mvn clean install, и удивляются, почему чужой плагин срабатывает в середине сборки.
Лечат конфликт версий удалением зависимости наугад вместо разбора дерева зависимостей с исключениями или фиксацией версии в dependencyManagement.
Забывают про локальный репозиторий, куда всё кэшируется. Отсюда рассказы про «у меня работает»: локально лежит давно скачанный артефакт, которого на чистом агенте нет.