Я борюсь с тем, как приближаться к адской зависимости. У меня есть проект Maven-IntelliJ Scala, который использует некоторые aws-sdk. Недавно добавление кинези sdk внесло несовместимые версии Jackson.
Мой вопрос: как я системно подхожу к проблеме Jar hell?
Я понимаю загрузчиков классов и то, как maven выбирает между дублирующими Jars, но я все еще не понимаю реальных практических шагов для устранения проблемы.
Мои попытки на данный момент основаны на проб и ошибок, и я описываю здесь пример Джексона:
- Во-первых, я вижу, что такое фактическое исключение, в данном случае NoSuchMethodError, для класса объектов ObjectMapper привязки данных Jackson. Затем я просматриваю документы Джексона, чтобы увидеть, когда этот метод был добавлен или удален. Обычно это довольно утомительно, поскольку я вручную проверяю api docs для каждой версии (вопрос 1: есть ли лучший способ?).
- Затем я использую
mvn dependency:tree
, чтобы выяснить, какая версия Jackson я фактически использую (вопрос 2: существует ли автоматический способ запроса maven, какая версия баночки используется, а не расчесывание выход дерева?). - Наконец, я сравниваю вывод
mvn dependency:tree
перед добавлением Kinesis SDK, а затем, чтобы обнаружить различия в выходеmvn dependency:tree
и, надеюсь, посмотреть, изменилась ли версия Джексона. (вопрос 3: Как maven использует библиотеки в заштрихованных баночках, когда происходит разрешение зависимостей? Как и любой другой?).
Наконец, после сравнения выходов дерева, я пытаюсь добавить последнюю последнюю версию Джексона в POM, чтобы вызвать приоритет в цепочке разрешения зависимостей maven. Если последнее не работает, я добавляю следующий самый последний lib и т.д.
Вся эта процедура невероятно утомительна. Помимо конкретных вопросов, которые я задал, мне также интересно узнать о системных подходах к этой проблеме. Есть ли у кого-нибудь какие-либо ресурсы, которые они используют?