Скажімо, у мене є чотири проекти:
- Проект 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 мають однакову глибину. Що трапляється, що у Мейвен буде конфлікт. Я знаю, що можна сказати Мейвену, що він повинен виключити залежності. Але моє питання полягає в тому, як вирішити такі проблеми. Я маю на увазі, що в реальному світі у вас багато залежностей і, можливо, багато конфліктів.
Чи справді найкращим практичним рішенням є виключення матеріалів чи існують інші можливі рішення для цього? Мені дуже важко мати справу, коли я раптом отримую виняток ClassNotFound, оскільки деякі версії змінилися, що змусило Maven взяти іншу залежність. Звичайно, знаючи цей факт, трохи легше здогадатися, що проблема полягає в конфлікті залежностей.
Я використовую maven 2.1-SNAPSHOT.