Maven создает плоский путь к классу из дерева зависимостей каждый для компиляции ([compile]
), для тестирования и для запуска .
В плоском пути к классам, в отличие от OSGi, зависимость может существовать только в одной версии . На вашем обрезанном скриншоте, среди прочего, есть второй уровень:
kafka-streams
1.0.2 и
kafka-clients
1.0.0 .
kafka-streams
1.0.2 требует kafka-clients
1.0.2 , что противоречит kafka-clients
1.0.0. Поэтому kafka-streams
1.0.2 опущено для конфликтов с 1.0.0 , даже если здесь требуется версия 1.0.2 ( "управляется с 1.0.2 « ** 1039).
Более подробно:
Путь к классу, который используется для компиляции или запуска простого Java-приложения, является плоским: все необходимые библиотеки глобально определены как упорядоченный список. Невозможно использовать библиотеку определенной версии для одного пакета, а для другого пакета - одну и ту же библиотеку в другой версии.
В зависимостях Maven создается дерево: каждая зависимость может иметь свои собственные зависимости. Maven отображает дерево зависимостей в classpath, упорядоченный список библиотек. Если в дереве зависимостей Maven одна и та же библиотека существует в разных версиях, создать плоский путь к классу невозможно. Это конфликт.
Этот конфликт разрешается путем выбора одной версии и пропуска всех других версий. В месте, где выбранная версия используется вместо требуемой версии, отображаются (managed from <required but not picked version>)
и (omitted for conflict with <picked version to use instead>)
.
Кроме того, Maven может создавать различные пути к классам для компиляции, тестирования или запуска приложения Java с помощью таковой. называется сферами . Область действия [compile]
- это область по умолчанию для использования библиотеки во всех задачах: компиляция, тестирование и запуск.
Убедитесь, что версии , указанные в файле pom.xml
, совместимы друг с другом (что на скриншоте еще не сделано): вам нужно обновить kafka-clients
с 1.0.0 до 1.0.2 (или понизить рейтинг других библиотек).