Невозможно выполнить код из-за java.lang.NoClassDefFoundError: com / fastxml / jackson / annotation / JsonMerge - PullRequest
0 голосов
/ 26 августа 2018

У меня есть тестовый код в версии для сообщества Intellij Idea 2018, в которой есть несколько файлов pom. Когда я запускаю любой тестовый аннотированный тест, я получаю сообщение об ошибке «тесты не найдены». Похоже, что проблема связана с этой частью трассировки стека исключений:

java.lang.NoClassDefFoundError: com / fastxml / jackson / annotation / JsonMerge

Я гуглил решение и нашел это - https://github.com/FasterXML/jackson-annotations/issues/119 и это https://stackoverflow.com/a/46406070. Похоже, что эта проблема вызвана тем, что у нас нет одной и той же версии этих jar-файлов в проекте.

1) Джексон-ядро (2.8.8)

2) Джексон-БД (2.9.2)

3) аннотации Джексона (2.8.5)

Как видите, у меня не одна и та же версия для всех банок. Я посмотрел на все poms в моем проекте и не нашел места, где все эти зависимости были добавлены. Я надеялся просто установить номер версии там. Должен ли я просто добавить все зависимости в родительский файл pom или сделать что-то еще?

Как мне решить эту проблему, не нанося вреда проекту? Как я узнаю, почему эти банки не одной и той же версии?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Ключевое слово, которое вы ищете, это "Исключение зависимости".Maven автоматически включает переходные зависимости.Сначала вы должны определить, откуда берутся зависимости.

Вы можете перенаправить вывод в файл и детально проанализировать его, выполнив поиск "jackson" в файле tree.txt, сгенерированном следующим образом:

mvn dependency:tree -Dverbose > tree.txt

Следующим шагом будет поискможете ли вы обновить некоторые из своих библиотек, чтобы они автоматически использовали нужную версию библиотек Джексона для вас.

Наконец, если вы явно хотите исключить транзитивные зависимости, вы можете использовать тег <exclusions> внутри определенного <dependency>, чтобы исключить некоторые сторонние зависимости, добавленные в ваш путь к классам.См., Например, SO вопрос .

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

Скорее всего, у вас есть разные версии, импортированные через разные зависимости как под-зависимости.

Вы можете заставить maven показать вам так называемый «эффективный pom», который даст вам полное дерево зависимостей, из которого вы сможете увидеть, что включено.

Некоторые IDE (например, IntelliJ) имеют возможность отображать это графически, что значительно упрощает поиск подобных конфликтов.

Исключить более ранние версии и при необходимости явно добавить зависимости к более новым версиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...