webentwicklung-frage-antwort-db.com.de

Fehler bei Verwendung von LogManager (l4j2) mit Java 8 (Java.lang.reflect.AnnotatedElement kann nicht aufgelöst werden)

Ich habe gerade einen seltsamen Fehler beim Wechseln der JDK-Version eines neuen Projekts von 7u45 auf 8u20 festgestellt. Eine harmlose LogManager-Deklaration zu Beginn meiner Klasse wird mit dem folgenden Fehler abgelehnt:

Der Typ Java.lang.reflect.AnnotatedElement kann nicht aufgelöst werden. Es wird indirekt auf die erforderlichen .class-Dateien verwiesen

Dies ist der Code:

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

Eclipse schlägt mir vor, den Erstellungspfad zu konfigurieren, aber ich habe keine Ahnung, was ich konfigurieren soll, da ich das zugrunde liegende Problem dieses Fehlers nicht kenne. 

Mit dem JDK mit Version 7 funktioniert alles gut. 

13
Corsair

Wenn Sie JDK 8 und ein IDE (oder ein anderes Codeverarbeitungswerkzeug/Framework) mit einem eigenen Compiler wie Eclipse verwenden, müssen Sie das Tool auf eine Version mit Java 8-Unterstützung aktualisieren, auch wenn dies nicht der Fall ist mit den neueren Java 8-Funktionen.

Der Grund ist, dass der Compiler in der Lage sein muss, die neueren Klassendateien der JRE zu laden, um Ihre Software zu kompilieren, die auf diese Klassen verweist.

Manchmal kommt man mit einem älteren Compiler aus, wenn die neuere Versionsnummer der Klassendateien ignoriert wird. Einige Typen verwirren jedoch ältere Klassendateiparser, wenn sie neue Funktionen verwenden, insbesondere AnnotatedElement , das jetzt default-Methoden besitzt, und Map.Entry , eine interface, die jetzt static-Methoden hat.

Es scheint, dass Eclipse keinen Unterschied macht zwischen Referenzen, für die keine Klassendatei gefunden werden konnte, und Klassendateien, die nicht gelesen werden konnten, wenn „« Klassenname »nicht aufgelöst werden konnte.

Gleiches gilt für alle Tools und Frameworks, die den EuGH als eingebetteten Compiler verwenden.

26
Holger

Wenn dies in Tomcat von Eclipse ausgeführt wird ( Frage wurde hier als Duplikat geschlossen und umgeleitet), gehen Sie zu Einstellungen → Server → Laufzeitumgebungen → Tomcat-Version → Bearbeiten… und stellen Sie sicher, dass Die ausgewählte JRE entspricht der Tomcat-Version. (Vielleicht müssen Sie eine installieren.)

1
Paramaeleon

Ich wechsle von JRE 8 zu JRE 7 und starte Eclipse neu. Dann funktioniert es gut.

0
Duong

Ich habe Eclipse Helios mit JRE 8 verwendet und das Update durch die Software gelöst. 

Jetzt verwende ich Eclipse Mars und funktioniert gut -> https://Eclipse.org/downloads/

0
Jessica

Lösung 1:

Versuchen Sie, den Quellpegel zu ändern.

  1. Gehen Sie zu Projekt> Einstellungen> Java Compiler.
  2. Projektspezifische Einstellungen aktivieren
  3. Stellen Sie den Compiler-Übereinstimmungsgrad auf 1.4 oder darunter ein.
  4. Neustart

Lösung 2: 

  1. Erstellen Sie einen neuen Arbeitsbereich.
  2. Kopieren Sie die Projektdateien in den neuen Arbeitsbereich.
  3. Projekt in Eclipse importieren und neu erstellen.