Почему посредник зависимостей Maven не выбирает самую новую версию?

Если проект Maven транзитивно использует несколько версий библиотеки, посредник зависимостей Maven будет проводить арбитраж по ближайшему определению и порядку в объявлении. (См. документы.)

Например. если A -> B -> X-1.0.0 и A -> B -> C -> X-2.0.0, то в здании A будет использоваться X-1.0.0.

Почему? Разумно предположить, что X-2.0.0 добавил какой-то метод, который используется C, поэтому запуск A, вероятно, вызовет исключение времени выполнения. Разве не имеет смысла выбрать самую новую версию? (Я знаю, что вы можете указать это вручную.)


person Marco Eckstein    schedule 09.10.2015    source источник


Ответы (2)


Также разумно предположить, что в версии 2.x удален какой-то метод, который используется A или B. Maven не может знать, какой из них является правильным в этом случае, и решает, что ближайшее определение - это тай-брейк. Если разработчику не нравится этот выбор, он может добавить прямую зависимость, как вы заметили.

person user944849    schedule 09.10.2015

Я не вижу веских причин для этого. Кажется, это доставит больше хлопот, чем спасет.

Стратегия посредничества зависимостей Ivy по умолчанию является «новейшей», а не «ближайшей», и кажется, что она работает очень хорошо почти во всех случаях. См. http://ant.apache.org/ivy/history/2.2.0/settings/conflict-managers.html

person Rich    schedule 10.12.2015