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