Понимание иерархии зависимостей затмения - PullRequest
0 голосов
/ 28 августа 2018

Я хочу понять зависимости для многомодульного проекта maven и для этого упоминается иерархия зависимостей затмения.

Я действительно понял честно, однако некоторые вещи я не в состоянии понять вообще.

Ниже приведен снимок экрана.

Вещи, которые я не понял:

-> управляемый с 1.0.2 [Compile}

-> управляемый с 1.0.2 (опущен для конфликта с 1.0.0) [Compile]

Я выполнил поиск в Интернете, но получил информацию в следах. Может ли кто-нибудь помочь мне понять, что они имеют в виду, легко понять?

Спасибо.

enter image description here

1 Ответ

0 голосов
/ 28 августа 2018

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 (или понизить рейтинг других библиотек).

...