java java-7 java-8 log4j2

Error al usar LogManager(l4j2) con Java 8(java.lang.reflect.AnnotatedElement no se puede resolver)



java-7 java-8 (5)

Al usar JDK 8 y un IDE (o cualquier otra herramienta / marco de procesamiento de código) con su propio compilador, como Eclipse, debe actualizar la herramienta a una versión compatible con Java 8, incluso si no está utilizando las funciones más recientes de Java 8 .

La razón es que el compilador debe poder cargar los archivos de clase más nuevos del JRE para compilar su software que hace referencia a estas clases.

A veces puede salirse con la suya un compilador anterior cuando ignora el número de versión más reciente de los archivos de clase. Pero algunos tipos confundirán a los analizadores de archivos de clase más antiguos, ya que usan nuevas características, en particular AnnotatedElement , que ahora tiene métodos default , y Map.Entry , una interface que ahora tiene métodos static .

Parece que Eclipse no hace una diferencia entre las referencias para las que no se pudo encontrar ningún archivo de clase y los archivos de clase que no pudo leer al decir " « nombre de clase » no se puede resolver".

Lo mismo se aplica a todas las herramientas y marcos que usan ECJ como compilador incrustado.

Acabo de encontrar un extraño error al cambiar la versión JDK de un nuevo proyecto mío de 7u45 a 8u20. Una declaración inofensiva de LogManager al comienzo de mi clase se rechaza con el siguiente error:

El tipo java.lang.reflect.AnnotatedElement no se puede resolver. Se hace referencia indirecta desde los archivos .class requeridos

Este es el código:

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

Eclipse me propone configurar la ruta de compilación, pero no tengo idea de qué configurar porque no sé el problema subyacente de ese error.

Usando el JDK con la versión 7, todo funciona bien.


Cambio de JRE 8 a JRE 7 y reinicio Eclipse, entonces funciona bien.


Estaba usando Eclipse Helios con JRE 8 y la actualización del software solucionó el problema.

Ahora estoy usando Eclipse Mars y funciona bien -> https://eclipse.org/downloads/


Si esto le sucede en Tomcat ejecutándose desde Eclipse (la question se cerró como duplicada y se redirige aquí), vaya a Preferencias → Servidor → Entornos en tiempo de ejecución → Versión de Tomcat → Editar… y asegúrese de que el JRE seleccionado coincida con la versión de Tomcat. (Tal vez necesite instalar uno).


Solución 1:

Intenta cambiar el nivel de origen.

  1. Vaya a Proyecto> Preferencias> Compilador Java.
  2. Habilitar configuraciones específicas del proyecto
  3. Establezca el nivel de cumplimiento del compilador en 1.4 o menos.
  4. Reiniciar

Solución 2:

  1. Crea un nuevo espacio de trabajo.
  2. Copie los archivos del proyecto en el nuevo espacio de trabajo.
  3. Importar proyecto en eclipse y reconstruir.