2016-06-03 13 views
13

Ok, also ich verstehe locker, dass 52.0 ist Java 8, und dass die Ausnahmen bedeutet, dass einige Code mit einer Version von Java und einige mit einem anderen kompiliert wird. Was ich nicht verstehen kann, ist, um welchen Weg es sich handelt.Was bedeutet "Nicht unterstützte Major.minor Version 52.0" und wie behebe ich es?

Hier ist der Stack-Trace, die ich bekomme:

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/openrdf/model/ValueFactory : Unsupported major.minor version 52.0 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2615) 
    at java.lang.Class.getMethod0(Class.java:2856) 
    at java.lang.Class.getMethod(Class.java:1668) 
    at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486) 

ich meinen Code von Eclipse ausführen und es stürzt ab, bevor Haupt erreichen. Ich habe ein paar Posts hier gelesen, in denen ich gesagt habe, dass ich mein Compliance-Niveau/meine JRE ändern soll, aber ich kann es anscheinend nicht beheben lassen.

Ist der Fehler, dass die Klasse 'ValueFactory' mit Java 8 kompiliert wurde, oder dass mein Code hat? Ich habe versucht, mein Compliance-Level auf 1,6, 1,7 und 1,8 zu ändern, aber keiner von beiden hat das Problem behoben.

Antwort

9

Sie nicht brauchen, um die Compliance-Ebene hier zu ändern, oder vielmehr sollten Sie, aber das ist nicht das Problem.

Die Code-Kompatibilität stellt sicher, dass Ihr Code mit einer bestimmten Java-Version kompatibel ist.

Wenn Sie z. B. eine Code-Compliance für Java 6 haben, können Sie die neuen Syntaxfunktionen von Java 7 oder 8 nicht verwenden (z. B. den Diamanten, die Lambdas usw.).

Das eigentliche Problem hier ist, dass Sie versuchen, etwas in einer Java-Version zu kompilieren, die sich von den Projektabhängigkeiten im Klassenpfad unterscheidet.

Stattdessen sollten Sie das JDK/JRE überprüfen, das Sie zum Erstellen verwenden.

Öffnen Sie in Eclipse die Projekteigenschaften und überprüfen Sie die ausgewählte JRE im Java-Erstellungspfad.

Wenn Sie benutzerdefinierte Ant-Skripte (usw.) verwenden, sollten Sie auch einen Blick darauf werfen, falls das oben Genannte nicht ausreicht.

+1

Mehr oder weniger. Nur um für jemand anderen zu klären. Ich habe JDK 1.7.0_79 ausgeführt. Ich habe jdk 1.8.0_81 hinzugefügt und in Fenster -> Einstellungen -> Java -> Installierte JREs ausgewählt. Das Problem lag im Build-Pfad für das betreffende Projekt, unter 'Order and Export' war JavaSE-1.7 'in der Liste höher als' jdk1.8.0_91 '. Ich denke, das bedeutet, dass die 1.7 Systembibliotheken importiert wurden und über 1.8 bevorzugt wurden. – Andy

+0

@Andy froh zu wissen, dass es jetzt für dich funktioniert. – Mena

7

Ihr Code wurde mit Java kompiliert 8.

Entweder kompilieren Sie Ihren Code mit einem älteren JDK (Konformitätsstufe) oder auf einem Java 8 JRE laufen.

Hope this helps ...

4

Eigentlich haben Sie einen Code ein höheres JDK (JDK 1.8 in Ihrem Fall) zusammengestellt Targeting aber zur Laufzeit Sie sind eine niedrigere JRE (JRE 7 oder darunter) zu liefern.

Sie können dieses Problem beheben, indem Sie während der Kompilierung
z. wenn Ihr Laufzeitziel 1.7 ist, sollten Sie 1,7 verwenden oder unter

javac -target 1.7 *.java 

, wenn Sie Eclipse verwenden, können Sie diesen Parameter an Fenster gesendet -> Einstellungen -> Java -> Compiler -> set „Compiler-Konformitätsstufe "= Wählen Sie Ihre Laufzeit jre Version oder niedriger.