maven-forcer-plugin жалуется на зависимости, которые я не могу найти в файлах pom.xml
Я столкнулся с проблемой с плагином maven-forcecer. Он жалуется на следующий (упрощенный) вывод:
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message:
Failed while enforcing releasability the error(s) are [
Dependency convergence error for com.company.project:interfaces:1.0.4 paths to dependency are:
+-com.company.project:product:1.0.14-SNAPSHOT
+-com.company.project:some_part_A:1.0.0
+-com.company.project:interfaces:1.0.4
and
+-com.company.project:product:1.0.14-SNAPSHOT
+-com.company.project:some_part_B:1.0.0
+-com.company.project:some_sub_part_BB:1.1.0
+-com.company.project:interfaces:1.0.4
and
+-com.company.project:product:1.0.14-SNAPSHOT
+-com.company.project:interfaces:1.0.6
Проблема с some_sub_part_BB:1.1.0
, Согласно плагину, эта часть зависит от версии 1.0.4 интерфейсов. Но это невозможно: версия 1.0.0 some_sub_part_BB
используемые интерфейсы версии 1.0.3 и версии 1.1.0 some_sub_part_BB
перешел непосредственно к использованию интерфейсов версии 1.0.6. У меня нет никаких артефактов some_sub_part_BB
который использует версию 1.0.4.
Я думаю, что я смотрю на некоторые ошибки в плагине, но я хотел бы отладить эту проблему, чтобы убедиться, что идет не так. Кто-то сталкивался с этой проблемой раньше, или кто-то может дать мне какие-нибудь советы о том, как отладить эту проблему? (Я довольно новичок в Maven, и, кроме проверки всех файлов pom.xml, я не знаю, где искать дальше).
Примечание: идея (была) заключается в том, что используемая версия интерфейса указывается в POM уровня проекта, так что все (под) части согласовывают, какой интерфейс использовать. Однако, как вы можете видеть, разные части также указывают, какой интерфейс они используют, что я не считаю правильным способом сделать это. Я не понял, как это исправить (пока).
1 ответ
Оказывается, это не ошибка: в файле pom.xml вы можете отменить версии артефактов в разделе dependencyManagement
, В моем случае кто-то ввел версию 1.0.4 интерфейсов. Плагин Inforcer не показывает это; это стало очевидным для меня только после генерации дерева зависимостей с подробным флагом, т.е. mvn dependency:tree -Dverbose
,