Как Maven разрешает конфликты версий транзитивных зависимостей? Стратегия ближайших побед

Я только что наконец привык к тому, что в моих проектах не было никаких Используемых необъявленных или Неиспользованных объявленных зависимостей. Хотя очень сложно отследить неиспользуемые объявленные зависимости времени выполнения / тестирования, которые перечислены в dependency: analysis ... Достаточно просто написать комментарии к ним в pom.xml или иным образом управлять ими, чтобы знать, что они необходимы для тестирования или выполнения.

. Но способ разрешения конфликта версий мне до сих пор не ясен. Относительно транзитивных зависимостей.

Как именно работает стратегия ближайшего выигрыша? Когда одна версия используется вместо другой?

  • Если вы объявляете Используемую необъявленную зависимость с номером версии - она ​​всегда выигрывает

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

  • Если вы не объявляете необъявленную используемую зависимость, она выбирает транзитивную зависимость из ближайшего уровня (стратегия ближайшего выигрыша) и если конфликт находится на том же уровне, тогда он каким-то образом решает между версией A и версией B ... Может быть, побеждает первый, который возникает при обработке зависимостей

19
задан lisak 8 June 2011 в 23:20
поделиться