unsupportedclassversionerror unsupported thread minor major java eclipse version

java - thread - unsupported major.minor version 51.0 maven



¿Qué significa ''No admitido major.minor versión 52.0'', y cómo lo arreglo? (3)

Esta pregunta ya tiene una respuesta aquí:

De acuerdo, entiendo que 52.0 es Java 8, y que las excepciones significan que algunos códigos se compilan con una versión de Java y otros con otra. Lo que no puedo entender es de qué manera es.

Aquí está la traza de pila que obtengo:

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)

Estoy ejecutando mi código desde el eclipse y se bloquea antes de llegar al principal. He seguido algunas publicaciones aquí que dicen que debo cambiar mi nivel de cumplimiento / mi JRE, pero parece que no puedo arreglarlo.

¿Está el error diciendo que la clase ''ValueFactory'' se ha compilado con java 8, o que mi código lo ha hecho? He intentado cambiar mi nivel de cumplimiento a 1.6, 1.7 y 1.8, pero ninguno de estos solucionó el problema.


En realidad, tiene un código compilado que apunta a un JDK superior (JDK 1.8 en su caso) pero en tiempo de ejecución está suministrando un JRE inferior (JRE 7 o inferior).

puede solucionar este problema agregando el parámetro de destino mientras compila
por ejemplo, si su objetivo de tiempo de ejecución es 1.7, debe usar 1.7 o inferior

javac -target 1.7 *.java

Si está utilizando eclipse, puede enviar este parámetro a Ventana -> Preferencias -> Java -> Compilador -> establecer "Nivel de cumplimiento del compilador" = elija su versión de Jre en tiempo de ejecución o inferior.


No necesita cambiar el nivel de cumplimiento aquí, o mejor dicho, debería hacerlo, pero ese no es el problema.

El cumplimiento del código garantiza que su código sea compatible con una versión determinada de Java.

Por ejemplo, si tiene un código de cumplimiento de Java 6, no puede usar las nuevas características de sintaxis de Java 7 u 8 (por ejemplo, el diamante, lambda, etc., etc.).

El problema real aquí es que está intentando compilar algo en una versión de Java que parece diferente de las dependencias del proyecto en el classpath.

En su lugar, debe verificar el JDK / JRE que está utilizando para compilar.

En Eclipse, abra las propiedades del proyecto y verifique el JRE seleccionado en la ruta de compilación de Java.

Si está utilizando scripts de Ant (etc.) personalizados, también desea echar un vistazo allí, en caso de que lo anterior no sea suficiente per se.


Su código fue compilado con Java 8.

Compile su código con un JDK anterior (nivel de cumplimiento) o ejecútelo en un JRE Java 8.

Espero que esto ayude...