Ошибка при использовании LogManager (l4j2) с Java 8 (java.lang.reflect.AnnotatedElement не может быть разрешена)

Я просто столкнулся с какой-то странной ошибкой при переключении версии JDK нового проекта my от 7u45 до 8u20. Отрицательное объявление LogManager в начале моего класса отклоняется со следующей ошибкой:

The type java.lang.reflect.AnnotatedElement cannot be resolved. It is indirectly referenced from required .class files

Это код:

public class Class1 {   
    private static Logger log = LogManager.getLogger(Class1.class); 
    ...

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

Используя JDK с версией 7, все работает нормально.

Ответ 1

При использовании JDK 8 и IDE (или любого другого инструмента/механизма обработки кода) с собственным компилятором, например Eclipse, вам необходимо обновить инструмент до версии с поддержкой Java 8, даже если вы не используете более новую версию Java 8.

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

Иногда вы можете уйти со старым компилятором, когда он игнорирует более новый номер версии файлов классов. Но некоторые типы будут путать старшие файловые парсеры классов, поскольку они используют новые функции, в частности AnnotatedElement, который теперь имеет методы default и Map.Entry, a interface, который теперь имеет методы static.

Кажется, что Eclipse не делает различий между ссылками, для которых не может быть найден файл класса, и файлы классов, которые он не смог прочитать, когда "classname" не может быть разрешено".

То же самое относится ко всем инструментам и фреймворкам, использующим ECJ как встроенный компилятор.

Ответ 2

Если это случится с вами в Tomcat, запущенном из Eclipse (вопрос, был закрыт как дубликат и перенаправления здесь), перейдите в Настройки → Сервер → Среда выполнения → Версия Tomcat → Изменить... и убедитесь, что выбранная JRE соответствует версии Tomcat. (Возможно, вам нужно установить его.)

Ответ 3

Я перехожу из JRE 8 в JRE 7 и перезапускает Eclipse, тогда он отлично работает.

Ответ 4

Я использовал Eclipse Helios с JRE 8, и обновление программного обеспечения решило проблему.

Теперь я использую Eclipse Mars и отлично работает → https://eclipse.org/downloads/

Ответ 5

Решение 1:

Попробуйте изменить исходный уровень.

  • Перейдите в Project > Preferences > Java Compiler.
  • Включить специальные настройки проекта
  • Установите уровень соответствия компилятора 1.4 или ниже.
  • Restart

Решение 2:

  • Создайте новое рабочее пространство.
  • Скопируйте файлы проекта в новое рабочее пространство.
  • Импортировать проект в eclipse и перестраивать.