Переопределить версию библиотеки, определенную в родительском помпе
Я определил версию 4.3 в родительском pom для библиотеки A, но в модуле проекта, указанном дочерним pom, требуется версия 2.5 A. Проблема, с которой я сталкиваюсь, заключается в том, что обе версии сохраняются, и, следовательно, я получаю конфликты.
Пожалуйста, сообщите, как решить проблему.
Ответы
Ответ 1
В общем, рекомендуется иметь только одну версию зависимости в вашем пути к классам в данный момент времени. Выполнение таким образом позволит вам точно знать, какая версия класса будет использоваться во время выполнения.
Чтобы избежать конфликтов версий, попробуйте указать свою зависимость следующим образом:
<dependency>
<groupId>commons-daemon</groupId>
<artifactId>commons-daemon</artifactId>
<version>1.0.1</version>
<exclusions>
<exclusion>
<groupId>some_group</groupId>
<artifactId>some_artifact</artifactId>
</exclusion>
</exclusions>
</dependency>
Если вам нужно указать groupId
и artifactId
вашего конфликтующего артефакта с версией 2.5.
Ответ 2
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
Согласование зависимостей - это определяет, какая версия зависимости будет использоваться при обнаружении нескольких версий артефакта. В настоящее время Maven 2.0 поддерживает только "ближайшее определение", что означает, что он будет использовать версию ближайшей зависимости от вашего проекта в дереве зависимостей. Вы всегда можете гарантировать версию, объявив ее явно в своем проекте POM. Обратите внимание: если две версии зависимостей находятся на одной и той же глубине в дереве зависимостей, пока Maven 2.0.8 не будет определен, какой из них будет побежден, но поскольку Maven 2.0.9 это порядок в объявлении, который считается: первое объявление выигрывает.
- "ближайшее определение" означает, что используемая версия будет самой близкой к вашему проекту в дереве зависимостей, например. если зависимости для A, B и C определены как A → B → C → D 2.0 и A → E → D 1.0, тогда D 1.0 будет использоваться при построении A, поскольку путь от A до D через E короче. Вы можете явно добавить зависимость от D 2.0 в A, чтобы принудительно использовать D 2.0
Похоже, что версия 2.5 включена транзитивно другой зависимостью. Это ставит обе версии 4.3 и 2.5 одинаковой длины.
- Проект → Родитель → A 4.3
- Проект → Зависимость → A 2.5
Явным образом определяя зависимость A 2.5 в вашем проекте, он будет ближайшим и переопределит любые другие версии.