Подтвердить что ты не робот

Переопределить версию библиотеки, определенную в родительском помпе

Я определил версию 4.3 в родительском pom для библиотеки A, но в модуле проекта, указанном дочерним pom, требуется версия 2.5 A. Проблема, с которой я сталкиваюсь, заключается в том, что обе версии сохраняются, и, следовательно, я получаю конфликты.

Пожалуйста, сообщите, как решить проблему.

4b9b3361

Ответ 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 в вашем проекте, он будет ближайшим и переопределит любые другие версии.