2016-06-03 32 views
13

Ok, quindi ho capito vagamente che 52.0 è Java 8 e che le eccezioni indicano che alcuni codici sono compilati con una versione di java e altre con un'altra. Quello che non riesco a capire è il modo in cui lo circonda.Che cosa significa "non supportato major.minor versione 52.0" e come lo risolvo?

Ecco la traccia dello stack che ottengo:

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) 

sto eseguendo il mio codice da Eclipse e si blocca prima di raggiungere principale. Ho seguito alcuni post qui dicendo di cambiare il mio livello di conformità/mio JRE, ma non riesco a farlo risolvere.

è l'errore dicendo che la classe 'ValueFactory' è stato compilato con Java 8, o che il mio codice ha? Ho provato a cambiare il mio livello di conformità a 1.6, 1.7 e 1.8, ma nessuno di questi ha risolto il problema.

risposta

9

Non è necessario modificare il livello di conformità qui, o meglio, si dovrebbe ma non è questo il problema.

La conformità del codice garantisce che il codice sia compatibile con una determinata versione di Java.

Ad esempio, se si dispone di una conformità al codice per il targeting di Java 6, non è possibile utilizzare le nuove funzionalità di sintassi di Java 7 o 8 (ad esempio il diamante, il lambda, ecc. Ecc.).

Il problema reale qui è che si sta cercando di compilare qualcosa in una versione di Java che sembra diversa dalle dipendenze del progetto nel percorso di classe.

Invece, si dovrebbe verificare il JDK/JRE che si sta utilizzando per costruire.

In Eclipse, aprire le proprietà del progetto e controllare la JRE selezionato nel percorso di generazione Java.

Se stai usando Ant personalizzati (etc.) gli script, anche voi volete dare un'occhiata lì, nel caso di cui sopra non è sufficiente di per sé.

+1

Più o meno. Giusto per chiarire qualcun altro. Stavo eseguendo JDK 1.7.0_79. Ho aggiunto jdk 1.8.0_81 e l'ho selezionato in Finestra -> Preferenze -> Java -> JRE installati. Il problema era nel percorso di costruzione per il progetto in questione, in 'Ordine ed esportazione' JavaSE-1.7 'era più in alto nell'elenco di' jdk1.8.0_91 '. Suppongo che questo significhi che le librerie di sistema 1.7 siano state importate e preferite sopra 1.8. – Andy

+0

@Andy contento di sapere che sta funzionando per te ora. – Mena

7

Il codice è stato compilato con Java 8.

O compilare il codice con un JDK più vecchio (livello di conformità) o eseguirlo su una Java 8 JRE.

Spero che questo aiuti ...

4

In realtà si ha un codice compilato mira un JDK più alto (JDK 1.8 nel tuo caso), ma in fase di esecuzione si sta fornendo un JRE inferiore (JRE 7 o al di sotto).

è possibile risolvere questo problema aggiungendo il parametro target durante la compilazione
ad es. se l'obiettivo runtime è 1.7, è necessario utilizzare 1,7 o al di sotto

javac -target 1.7 *.java 

se si utilizza Eclipse, è possibile inviare questo parametro a Finestra -> Preferenze -> Java -> Compiler -> set "livello di conformità del compilatore "= scegli la tua versione jre di runtime o inferiore.