Разрешение конфликта Ivy не работает

Мой модуль A зависит от модулей B и C, которые зависят от разных версий модуля D. Мои зависимости Ivy выглядят так:

<ivy-module>
<info organisation="com.a" module="A"/>
<configurations defaultconf="runtime">
    <conf name="runtime"/>
</configurations>
<dependencies>    
    <dependency org="org.b" name="B" rev="2.0" conf="runtime->default" />    
    <dependency org="org.c" name="C" rev="2.4" conf="runtime->default" />
    <conflict org="org.d" module="D" rev="2.4"/>
</dependencies>
</ivy-module>

Я использую диспетчер строгого разрешения конфликтов, и он правильно указывает на конфликт:

[ivy:retrieve] :: Apache Ivy 2.3.0-rc2 - 20121105223351 :: http://ant.apache.org/ivy/ ::
...
...
[ivy:retrieve] :::: ERRORS
[ivy:retrieve]  org.d#D;2.3 (needed by [org.c#C;2.4]) conflicts with org.d#D;2.4 (needed by [org.b#B;2.0])

Почему тег конфликта не говорит Айви использовать версию 2.4 модуля D? Я хотел бы использовать строгое разрешение конфликтов, а затем переопределять конфликты по одному, чтобы было ясно, где мы рискуем не использовать версию зависимости, упомянутую в pom/ivy другого проекта. Добавление исключения org.d к зависимости org.c устраняет конфликт, но мне кажется, что использование тега конфликта более понятно будущим читателям файла.


person rzrelyea    schedule 12.12.2012    source источник
comment
Не уверен, что это действительно ответ, но в конце концов я понял, что если я изменю порядок зависимостей, тег конфликта вытеснит правильную зависимость. Я перечитал конфликтную документацию, и она сказать, что порядок имеет значение. Однако он не говорит, как выяснить, какой порядок является правильным, поэтому пользователь может просто попробовать разные порядки зависимостей, пока не найдет тот, который работает.   -  person rzrelyea    schedule 06.04.2013


Ответы (1)


Вы также можете попробовать установить атрибут force для модуля D. Это заставит Ivy взять 2.4 в этом примере:

<dependency org="org.d" module="D" rev="2.4" conf="runtime->default" force="true" />
person Matthias Bechtold    schedule 21.12.2015