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