Допустим, у меня есть четыре проекта:
В этом сценарии, если я запустил проект A, Maven правильно разрешит зависимость от D. Если я правильно это понимаю, Maven всегда принимает зависимость кратчайшим путем. Поскольку D является прямой зависимостью от A, он будет использоваться вместо D, который указан в B.
Но теперь предположим эту структуру:
В этом случае пути к разрешению D имеют одинаковую глубину. Что происходит, так это то, что у Maven будет конфликт. Я знаю, что можно сказать Maven, что он должен исключить зависимости. Но мой вопрос в том, как решать такие проблемы. Я имею в виду, что в реальном приложении у вас есть много зависимостей и, возможно, много конфликтов.
Действительно ли лучшее практическое решение - исключать какие-то вещи или есть другие возможные решения? Мне очень трудно справиться, когда я внезапно получаю исключение ClassNotFound Exception, потому что некоторые версии изменились, что привело к тому, что Maven принял другую зависимость. Конечно, зная этот факт, немного легче догадаться, что проблема заключается в конфликте зависимостей.
Я использую maven 2.1-SNAPSHOT.