Разрешение зависимостей Maven (конфликтуют)

Допустим, у меня есть четыре проекта:

  • Проект A (имеет зависимость от B и D)
  • Проект B (зависит от D)
  • Проект C (имеет зависимость от D)
  • Проект D

В этом сценарии, если я запустил проект A, Maven правильно разрешит зависимость от D. Если я правильно это понимаю, Maven всегда принимает зависимость кратчайшим путем. Поскольку D является прямой зависимостью от A, он будет использоваться вместо D, который указан в B.

Но теперь предположим эту структуру:

  • Project A (имеет зависимость от B и C)
  • Project B (имеет зависимость от D)
  • Проект C (имеет зависимость от D)
  • Проект D

В этом случае пути к разрешению D имеют одинаковую глубину. Что происходит, так это то, что у Maven будет конфликт. Я знаю, что можно сказать Maven, что он должен исключить зависимости. Но мой вопрос в том, как решать такие проблемы. Я имею в виду, что в реальном приложении у вас есть много зависимостей и, возможно, много конфликтов.

Действительно ли лучшее практическое решение - исключать какие-то вещи или есть другие возможные решения? Мне очень трудно справиться, когда я внезапно получаю исключение ClassNotFound Exception, потому что некоторые версии изменились, что привело к тому, что Maven принял другую зависимость. Конечно, зная этот факт, немного легче догадаться, что проблема заключается в конфликте зависимостей.

Я использую maven 2.1-SNAPSHOT.

67
задан Evdzhan Mustafa 19 September 2019 в 15:49
поделиться