Ответ 1
У вас есть несколько вариантов:
- Без изменений. Перечислите все зависимости в каждом pom. Однако, если у них есть общий родитель, вы можете использовать dependencyManagement в родительском pom для установки версий для разных зависимостей. В детском помпе вам не нужно указывать версию. См. этот раздел из Maven по примеру. Недостатком этого подхода является то, что вам придется повторно переписывать одни и те же зависимости снова и снова.
- Создайте родительский pom, в котором перечислены все общие зависимости. См. Пример здесь. Недостатком здесь является то, что вы ограничиваете все проекты, которые хотят воспользоваться этим, для использования родительского проекта, когда по какой-то причине им может понадобиться другой родительский проект.
- Подождите, пока Maven mixins, который, как я слышал, был еще не готов.
- Переосмыслите свой дизайн. Имеет ли смысл, чтобы проекты зависели от множества разных модулей и интерфейсов? Чтобы уменьшить coupling, вы можете создать один интерфейс, который могут использовать эти новые проекты. Несколько таких проектов, как Apache Axis2, с открытым исходным кодом, следуют этому шаблону. Один модуль содержит ваши 20 зависимостей и предоставляет интерфейс, который могут вызывать новые модули. Новые модули могут просто перечислить один основной модуль как зависимость, а все 20 зависимостей втянуты в транзитивные зависимости.
Я думаю, что выбор № 4, вероятно, прав, но я недостаточно знаком с вашей ситуацией.