У меня есть многомодульный проект 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
в родительский». Моя проблема в том, что мне нужно, чтобы A, B и C зависели от одной и той же версии, но я не имею никакого контроля над C.
Я думаю, это то, к чему Maven "миксин" предназначены, но, конечно, они еще не существуют. В то же время я выбираю одного из родителей, затем копирую и вставляю раздел dependencyManagement
из другого POM с комментарием, гласящим «убедитесь, что вы обновляете». Очевидно, что это уродливый, уродливый взлом, но я не нашел другого способа поддерживать связь с обеими сторонами.