IncompatibleClassChangeError при запуске моего приложения - PullRequest
0 голосов
/ 18 марта 2019

Я получаю сообщение об ошибке ниже, когда пытаюсь запустить приложение на машине Amazon Linux.

Caused by: java.lang.IncompatibleClassChangeError: class com.google.common.cache.CacheBuilder$3 has interface com.google.common.base.Ticker as super class
        at java.lang.ClassLoader.defineClass1(Native Method)

1 Ответ

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

Ошибка означает, что байт-код для CacheBuilder ожидает, что Ticker будет Java-классом, но вместо этого это был интерфейс.

У вас есть две версии Guava на пути к классам ИЛИ вы запускаете приложение с другой версией Guava, отличной от той, которую вы использовали для сборки.

Попробуйте mvn dependency:tree и найдите дубликаты. Если это выглядит хорошо, проверьте путь к классу при запуске приложения на вашей виртуальной машине.

В редких случаях кто-то мог быть "умным" и копировать байт-код для com.google.common.base.Ticker (или CacheBuilder) в свой JAR-файл. Попробуйте текстовый поиск по всем JAR-файлам, чтобы найти кандидатов, или напишите модульный тест, который выводит результат

getClass().getClassLoader().getResources("com/google/common/base/Ticker.class");

чтобы узнать, кто любит вносить свой вклад (должен возвращать только один URL). Если это работает, сделайте то же самое для CacheBuilder.

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