В чем разница между тегом переопределения плюща и атрибутом force = true?

1

Вот пример. Мы имеем дело с плющом 2.1 и с муравьем 1.8.3. Один из наших проектов имеет прямую зависимость от "математики" версии 5.1 и "общей" версии 1.4.6. Но "общий" имеет прямую зависимость от "математики" версии 5.2.

<dependencies>
   <dependency org="home" name="math" revision="5.1" conf="runtime" />
   <dependency org="home" name="common" revision="1.4.6" conf="runtime" />
</dependencies>

Уверен, что резолюция соберет версию "математики" 5.2 из-за "общей прямой зависимости". Поскольку это приводит к ошибке компилятора, я хочу использовать вместо этого "math" 5.1, поэтому я попытался поместить правильный тег переопределения в xyb xml после всех тегов зависимостей:

<override org="home" module="math" rev="5.1" />

Он должен работать и собирать только версию 5.1. И оказалось, что он действительно работает в IntelliJ IDEA 14 и в Eclipse 4.3, поэтому после решения соответствующего плагина ivy я вижу в библиотеках проектов только "математическую" версию 5.1. Я проверил график зависимостей в представлении Ivy Visualizer, и это казалось прекрасным.

Однако, когда я использую одну из подходящих целей сборки Ant, она терпит неудачу с ошибкой компиляции, потому что она разрешает "математику" версии 5.2 вместо 5.1 (!!).

Основываясь на документации на плющ,

"может быть полезна, когда прямая зависимость приводит к транзитивной зависимости, для которой вы хотите изменить ревизию, без фактического объявления зависимости от нее"

Также утверждается, что

Переопределение выполняется раньше всего, в фазе, называемой посредничеством дескриптора зависимости. Транзитивная зависимость тогда ведет себя точно так, как если бы она была объявлена с новым значением.

Поэтому он также должен работать с сборкой муравьев, но ведет себя противоречащим ожиданию. В конце концов мы выяснили, что атрибут force (force= "true") тега зависимостей - это спасение, которое приводит к ожидаемой структуре библиотеки после IDE и после разрешения сборки муравьев. Основываясь на документации на плющ:

... элемент зависимостей также поддерживает атрибут force (начиная с 0.8), который дает указание диспетчеру конфликтов принудительно пересматривать зависимость от указанной здесь.

Почему переопределяющий тег вызывает противоречивое поведение разных инструментов и почему работает force = "true"? Я был бы признателен, если кто-нибудь сможет выделить (незначительные?) Различия.

Теги:
intellij-idea
ant
ivy

1 ответ

0

Я никогда не использовал функцию переопределения, но все время использую force = "true", и он отлично работает в "большинстве" случаев.

Я столкнулся с проблемой с одним из моих разработчиков сегодня, когда сила = "истина", казалось, работала (резюме показывало конфликт, выбирая правильную версию (принудительный)). Но затем сразу после этого с отдельными конфликтами файлов он выбрал версию выведенного модуля, не знаю почему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню