Вопрос проверяет умение работать с dependency graph и устранять типичные проблемы Maven-проектов.
Конфликты версий решаются с помощью явного указания версии зависимости. Также используется dependencyManagement. Иногда исключают транзитивные зависимости. Maven по умолчанию выбирает «ближайшую» версию, но это не всегда оптимально. Поэтому управление версиями должно быть осознанным.
В реальных проектах разные библиотеки часто тянут разные версии одной и той же зависимости.
Конфликт версий зависимостей — это ситуация, когда в проекте присутствуют несколько версий одной библиотеки через разные цепочки зависимостей.
Перед перечислением решений важно понимать базовое правило Maven.
Maven выбирает зависимость, которая ближе к корню графа
Версия может быть неожиданной
Поведение не всегда очевидно
Зависимость добавляется напрямую
Maven использует указанную версию
Самый простой и частый способ
dependencyManagementЦентрализованное управление версиями
Удобно для больших проектов
Часто используется в parent POM
Убираются лишние или конфликтующие библиотеки
Используется аккуратно
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
Набор согласованных версий
Часто применяется в экосистемах Spring
Конфликты зависимостей решаются через явное управление версиями, а не попытками «угадать», какую версию выберет Maven.