Ответ 1
В настоящее время я собираюсь принять ответ "это одна из очень сущих вещей о Maven". Возможно, этот вопрос может быть обновлен при запуске Maven 3.1.
У меня есть проект мультимодуля проекта 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 с комментарием, говорящим "не забудьте сохранить это обновление". Очевидно, это уродливый, уродливый хак, но я не нашел другого способа сохранить ток с обеих сторон.
В настоящее время я собираюсь принять ответ "это одна из очень сущих вещей о Maven". Возможно, этот вопрос может быть обновлен при запуске Maven 3.1.
Как насчет использования сборщика плагинов, чтобы упаковать артефакт со всеми его зависимостями и вместо этого использовать ваш упаковочный модуль? Тогда вы не пытаетесь использовать магию магии. Это просто вопрос одного проекта с использованием артефакта из другого проекта, как обычно.
Не могли бы вы активировать несколько профилей, которые имеют свой собственный раздел зависимостей, потянув в нужные библиотеки при включении. Это обеспечивает некоторую гибкость благодаря тому, как можно активировать профили.