У меня есть многомодульный проект Maven. Некоторые модули создают пользовательские пакеты для библиотек, созданных другими модулями. Используемая упаковка имеет свой собственный набор версионных зависимостей, с которыми мне нужно поиграться.
В качестве примера: мой родительский POM может иметь запись, например. commons-codec:commons-codec 1.4
, мой POM "core-lib" включает его в качестве зависимости (без явной версии), и я хочу убедиться, что мой модуль упаковки входит в правильную версию. Однако конкретный тип пользовательской упаковки, который я использую, также требует, например. log4j:log4j 1.2.15
, и я хочу убедиться, что при запуске моего модуля упаковки он также включает правильную версию log4j.
Вот загвоздка: пример POM, с которым я работаю для «проекта, который создает {индивидуальную упаковку}», использует родителя, предоставленного командой пользовательской упаковки. Если я использую их родителя, я теряю информацию о версии для commons-codec
. Если я использую своего родителя, я теряю информацию о версии для log4j
.
Теперь, обычно, если я спрашиваю "как сделать так, чтобы A и B зависели от одной и той же версии", вы бы ответили: "сделать так, чтобы A и B имели один и тот же родитель, и включить dependencyManagement
section в родителя". Моя проблема в том, что мне нужно, чтобы A, B и C зависели от одной и той же версии, но у меня нет никакого контроля над C.
Я думаю, это то, для чего предназначены "примеси" Maven, но, конечно, их пока не существует. Тем временем я выбираю одного родителя, затем копирую и вставляю раздел dependencyManagement
из другого POM с комментарием «убедитесь, что вы поддерживаете это в актуальном состоянии». Очевидно, это уродливый, уродливый хак, но я не нашел другого способа быть в курсе обеих сторон.