Tomcat 7 arroja un error de versión de clase no compatible

Tomcat 7 arroja un error de versión de clase no compatible

Estoy configurando un servidor Tomcat para alojar sitios JSP. Creé una aplicación de prueba en Eclipse para asegurarme de que todo funciona. Todo lo que hace es imprimir texto en JSP y luego llamar a una función en una clase personalizada que también imprime texto. Esto funciona bien en Eclipse (se ejecuta en la misma computadora que Tomcat), pero cuando compilo el programa en un archivo WAR e intento ejecutarlo desde Tomcat, arroja la excepción:

message javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass)

description The server encountered an internal error that prevented it from fulfilling this request.

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass)
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
    ...

root cause

javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass)
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:912)
    ...

root cause

java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2899)
    ...

Debo señalar que una vez que actualizo la página, el error cambia a solo UnsupportedClassVersionErrory pierde el elemento "mayor.menor". No estoy seguro de lo que está pasando allí.

Google me ha dicho que esto tiene que ver con que el tiempo de ejecución es una versión más antigua que el compilador; sin embargo, hasta donde puedo decir, tanto Eclipse como Tomcat están usando la más reciente. Están en la misma computadora, por lo que deberían usar la misma variable JAVA_HOME, ¿verdad? Tengo varias instalaciones JRE/JDK diferentes y probé varias de ellas como JAVA_HOME, aunque nada pareció cambiar (reinicio Tomcat cada vez). A partir de ahora es:

JAVA_HOME = C:\Program Files\Java\jdk1.7.0_25
Path = C:\Program Files\Java\jdk1.7.0_25\bin; ...

¿Hay algo más que deba configurarse para que Tomcat use esta versión de Java? ¿O hay una ubicación diferente a la que debo señalar JAVA_HOME? También probé varias de las instalaciones de JRE pero no encontré nada. ¿Alguna idea con esto?

Todo esto se hace en Windows Server 2008 R2 usando Tomcat 7.

Gracias de antemano.

doug

Respuesta1

En Eclipse, vaya a las Preferencias del proyecto, vaya a la configuración del compilador Java.

Cuál es elnivel de cumplimiento del compilador?

Si está ejecutando esto con Tomcat 7 con Java 7, entonces el nivel de cumplimiento debe establecerse en1.7. Si no es así, entonces ese puede ser tu problema. Aunque debería estar bien siempre y cuando sea <=1.7, ¿no habrías configurado eclipse para una instantánea de Java 8?

De cualquier manera, conocer este valor puede ayudar a aclarar la cuestión.

Respuesta2

UnsupportedClassVersionErrorsiempre aparece cuando compila "con" una versión (apuntando a una versión) y ejecuta con una versión anterior de Java.

JAVA_HOMEno le dice al sistema operativo dónde debe buscar el archivo java.exe. El sistema operativo tomará ese archivo de la variable PATH. Por eso se recomienda agregar al principio de la PATHvariable, la ruta JAVA_HOME/bin.

Si no es el caso, el seguimiento de la pila (el resto del mensaje de error) podría resultar útil. En particular, el "mayor.menor no compatible" o algo así, y los números.

Información adicional.

Respuesta3

¿Cómo está implementando su código en Tomcat, a través de Eclipse (WTP) o está creando un WAR con una herramienta de compilación particular e implementándolo manualmente en un Tomcat local?

información relacionada