Как я могу делиться Maven DepdendencyManagement из нескольких источников?

У меня есть проект мультимодуля проекта 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 с комментарием, говорящим "не забудьте сохранить это обновление". Очевидно, это уродливый, уродливый хак, но я не нашел другого способа сохранить ток с обеих сторон.

Ответ 1

В настоящее время я собираюсь принять ответ "это одна из очень сущих вещей о Maven". Возможно, этот вопрос может быть обновлен при запуске Maven 3.1.

Ответ 2

Как насчет использования сборщика плагинов, чтобы упаковать артефакт со всеми его зависимостями и вместо этого использовать ваш упаковочный модуль? Тогда вы не пытаетесь использовать магию магии. Это просто вопрос одного проекта с использованием артефакта из другого проекта, как обычно.

Ответ 3

Не могли бы вы активировать несколько профилей, которые имеют свой собственный раздел зависимостей, потянув в нужные библиотеки при включении. Это обеспечивает некоторую гибкость благодаря тому, как можно активировать профили.