web-dev-qa-db-fra.com

Erreur lors de l'utilisation de LogManager (l4j2) avec Java 8 (impossible de résoudre Java.lang.reflect.AnnotatedElement)

Je viens de rencontrer une erreur étrange lors du passage de la version JDK d’un nouveau projet du mien de 7 h 45 à 8 h 20. Une déclaration inoffensive de LogManager au début de ma classe est refusée avec l'erreur suivante:

Le type Java.lang.reflect.AnnotatedElement ne peut pas être résolu. Il est indirectement référencé à partir des fichiers .class requis.

C'est le code:

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

Eclipse me propose de configurer le chemin de génération, mais je ne sais pas quoi configurer car je ne connais pas le problème sous-jacent de cette erreur. 

En utilisant le JDK avec la version 7, tout fonctionne bien. 

13
Corsair

Lorsque vous utilisez JDK 8 et un IDE (ou tout autre outil/framework de traitement de code) avec son propre compilateur, comme Eclipse, vous devez mettre à jour l'outil avec une version prenant en charge Java 8, même si vous n'utilisez pas le logiciel. nouvelles fonctionnalités de Java 8.

La raison en est que le compilateur doit pouvoir charger les fichiers de classe les plus récents du JRE afin de compiler votre logiciel qui référence ces classes.

Parfois, vous pouvez vous passer d'un compilateur plus ancien en ignorant le numéro de version le plus récent des fichiers de classe. Mais certains types vont confondre les anciens analyseurs de fichiers de classe car ils utilisent de nouvelles fonctionnalités, notamment AnnotatedElement , qui a maintenant les méthodes default, et Map.Entry , un interface qui a maintenant des méthodes static.

Il semble qu'Eclipse ne fasse pas de différence entre les références pour lesquelles aucun fichier de classe n'a pu être trouvé et les fichiers de classe qu'il n'a pas pu lire en disant «« nom de classe » ne peut pas être résolu».

La même chose s'applique à tous les outils et frameworks utilisant la CJE comme compilateur intégré.

26
Holger

Si cela vous arrive dans Tomcat sous Eclipse ( question était fermé en double et redirige ici), allez à Préférences → Serveur → Environnements d'exécution → Version Tomcat → Éditer… et assurez-vous que le JRE sélectionné correspond à la version de Tomcat. (Peut-être que vous devez en installer un.)

1
Paramaeleon

Je change de JRE 8 à JRE 7 et redémarre Eclipse, puis tout fonctionne bien.

0
Duong

J'utilisais Eclipse Helios avec JRE 8 et la mise à jour du logiciel résolvait le problème. 

Maintenant, j'utilise Eclipse Mars et fonctionne parfaitement -> https://Eclipse.org/downloads/

0
Jessica

Solution 1:

Essayez de changer le niveau source.

  1. Allez dans Projet> Préférences> Compilateur Java.
  2. Activer les paramètres spécifiques au projet
  3. Définissez le niveau de conformité du compilateur sur 1.4 ou moins.
  4. Redémarrer

Solution 2: 

  1. Créez un nouvel espace de travail.
  2. Copiez les fichiers du projet dans le nouvel espace de travail.
  3. Importer le projet dans Eclipse et reconstruire.
0