Затенение зависимости в Maven
У меня есть две зависимости, импортированные через Maven, которые импортируют общую библиотеку, но в разных версиях, но версии не совместимы друг с другом. По сути проблемы, описанные в этом посте:
Но, к сожалению для меня, решение не так просто, как описано в блоге, потому что нет единой версии пакета Z
это работает для обеих зависимостей.
Пропустив неудачные дизайнерские решения, которые привели к этому, поскольку я не контролирую ни одну из этих библиотек, я собираюсь переупаковать одну из зависимостей верхнего уровня и затенить все ее зависимости, чтобы она могла по существу использовать свою собственную изолированную версию. из Z
, Возможно ли это сделать с Maven?
Одним из решений, которое я рассмотрел, является изоляция всех классов, которые зависят от пакета Y
и положить их в отдельном приложении и доставки, как в тени jar
который X
импорт, однако мне интересно, есть ли более простой способ сделать это.
1 ответ
Как и все предлагали, вы можете использовать maven-shade-plugin. Проекты с открытым исходным кодом обрабатывают это путем создания одного подпроекта maven для каждой зависимости, которую необходимо заштриховать. Так что в вашем случае вам понадобится 3 проекта Maven:
- Один для зависимости затенения Y
- Один для зависимости затенения G
- Один для вашего оригинального проекта. Ваш оригинальный проект включает артефакты, созданные в 1. и 2. как зависимости.
Ваша иерархия проекта maven будет выглядеть так:
- проект
- pom.xml
- тени-Y,
- pom.xml
- тень-G
- pom.xml
- приложение
- pom.xml
Пример проекта с подпроектом maven для затенения зависимости приведен здесь. Посмотрите на папку shaded-ning19, чтобы узнать, как создать выделенный проект maven для затенения зависимости.