web-dev-qa-db-fra.com

Que signifie 'major.minor version 52.0' non supporté et comment le corriger?

Ok, je comprends donc mal que 52.0 est Java 8 et que les exceptions signifient que du code est compilé avec une version de Java et d’autres avec une autre. Ce que je n'arrive pas à comprendre, c'est comment.

Voici la trace de la pile que je reçois:

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)

J'exécute mon code depuis Eclipse et il se bloque avant d'arriver à main. J'ai suivi quelques posts ici disant de changer mon niveau de conformité/mon JRE, mais je n'arrive pas à le corriger.

L'erreur indique-t-elle que la classe 'ValueFactory' a été compilée avec Java 8 ou que mon code l'est? J'ai essayé de modifier mon niveau de conformité en 1.6, 1.7 et 1.8, mais aucun de ceux-ci n'a résolu le problème.

23
Andy

Vous n'avez pas besoin de pour changer le niveau de conformité ici, ou plutôt, vous devriez mais ce n'est pas le problème.

La conformité du code garantit que votre code est compatible avec une version donnée de Java.

Par exemple, si vous avez un code de conformité de code ciblant Java 6, vous ne pouvez pas utiliser les nouvelles fonctionnalités de syntaxe de Java 7 ou 8 (par exemple, le losange, le lambda, etc.). .

Le problème actuel est que vous essayez de compiler quelque chose dans une version Java qui semble différente des dépendances du projet dans le chemin d'accès aux classes.

Au lieu de cela, vous devriez vérifier le JDK/JRE que vous utilisez pour construire.

Dans Eclipse, ouvrez les propriétés du projet et vérifiez le JRE sélectionné dans le chemin de construction Java.

Si vous utilisez des scripts Ant (etc.) personnalisés, vous souhaitez également y jeter un coup d'œil, au cas où ce qui précède n'est pas suffisant en soi.

15
Mena

Votre code a été compilé avec Java 8.

Compilez votre code avec un JDK plus ancien (niveau de conformité) ou exécutez-le sur un JRE Java 8.

J'espère que cela t'aides...

8
R. Horber

En réalité, vous avez un code compilé ciblant un JDK supérieur (JDK 1.8 dans votre cas), mais au moment de l'exécution, vous fournissez un JRE inférieur (JRE 7 ou inférieur).

vous pouvez résoudre ce problème en ajoutant un paramètre cible lors de la compilation
par exemple. si votre cible d'exécution est 1.7, vous devez en utiliser 1.7 ou moins.

javac -target 1.7 *.Java

si vous utilisez Eclipse, vous pouvez envoyer ce paramètre sous Fenêtre -> Préférences -> Java -> Compilateur -> définir "Niveau de conformité du compilateur" = choisissez votre version d’exécution inférieure ou inférieure.

5
rsingh25