Конфликт зависимостей Maven во время выполнения с Twilio - PullRequest
0 голосов
/ 20 марта 2019

Получение ошибки «класс не найден» во время выполнения из-за проблемы зависимостей maven:

Я работаю над интеграцией twilio sdk (com.twilio.sdk: twilio: 7.35.0) в многомодульный проект maven (3.x) / java (java8). Я сначала добавил зависимость Twilio Maven в соответствующий модуль И я получаю исключение класса не найден во время выполнения на org.apache.http.conn.HttpClientConnectionManager. Я изучил его и обнаружил, что этот класс является частью org.apache.httpcomponents: httpclient (который является зависимостью в twilio sdk) и что более ранняя версия этой зависимости находится в моем проекте. И эта более ранняя версия не имеет класса HttpClientConnectionManager.

Итак, с этого момента я попытался исключить старую версию зависимости сначала с помощью тега exclude, а затем с помощью плагина maven inspecer и в то же время импортировать зависимость напрямую, но ничего не получалось. Я попытался импортировать зависимость в родительский pom и в другие модули, которые также используют мой модуль twilio.

Я использую twilio 7.35, который использует org.apache.httpcomponents: 4.5.6, но в моем многомодульном проекте я использую org.apache.cassandra: cassandra-thrift: 3.0.0, который использует thrift: 0.9.2 который содержит старую версию httpclient (4.2.5). Последняя версия этого модуля cassandra не поддерживает последнюю версию httpClient, поэтому я должен убедиться, что эта более старая зависимость httpclient не испортит twilio.

Я также проанализировал вывод зависимости mvn: tree -Dverbose, и кажется, что 4.5.6 получает исправление. И когда я попытался добавить его в родительский модуль или вызывающий модуль, я увидел, что старая версия перезаписывается twilio, но это не решает мою проблему.

Я начинаю задаваться вопросом, возможно ли вообще иметь две версии зависимостей в одном проекте maven.

1 Ответ

0 голосов
/ 21 марта 2019

Звучит так, как будто вы столкнулись с чем-то похожим на вопрос, связанный с Jar Hell: Jar Hell: как использовать загрузчик классов для замены одной версии библиотеки jar на другую во время выполнения

В этом случае вам нужно использовать отдельный загрузчик классов из используемого по умолчанию в вашем проекте. Возможно, вы могли бы использовать URL Classloader и загрузить некоторые или все ваши новые зависимости из файловой системы.

...