Tomcat 7 gibt einen nicht unterstützten Klassenversionsfehler aus

Tomcat 7 gibt einen nicht unterstützten Klassenversionsfehler aus

Ich richte einen Tomcat-Server zum Hosten von JSP-Sites ein. Ich habe eine Testanwendung in Eclipse erstellt, um sicherzustellen, dass alles funktioniert. Sie druckt lediglich Text in JSP und ruft dann eine Funktion in einer benutzerdefinierten Klasse auf, die ebenfalls Text druckt. Dies läuft in Eclipse (auf demselben Computer wie Tomcat) einwandfrei. Wenn ich das Programm jedoch in eine WAR-Datei kompiliere und versuche, es von Tomcat aus auszuführen, wird die folgende Ausnahme ausgelöst:

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)
    ...

Ich sollte darauf hinweisen, dass sich der Fehler ändert, sobald ich die Seite aktualisiere, UnsupportedClassVersionErrorund das „major.minor“-Zeug verliert. Ich bin mir nicht sicher, was da los ist.

Google hat mir gesagt, dass dies damit zusammenhängt, dass die Runtime eine ältere Version als der Compiler ist. Soweit ich das beurteilen kann, verwenden jedoch sowohl Eclipse als auch Tomcat die neueste Version. Sie befinden sich auf demselben Computer, also sollten sie dieselbe JAVA_HOME-Variable verwenden, oder? Ich habe mehrere verschiedene JRE-/JDK-Installationen und habe mehrere davon als JAVA_HOME ausprobiert, aber nichts schien sich zu ändern (ich starte Tomcat jedes Mal neu). Im Moment ist es:

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

Muss noch etwas anderes eingestellt werden, damit Tomcat diese Java-Version verwenden kann? Oder muss ich JAVA_HOME auf einen anderen Speicherort verweisen? Ich habe auch mehrere JRE-Installationen ausprobiert, aber nichts gefunden. Irgendwelche Ideen dazu?

Dies alles wird auf Windows Server 2008 R2 mit Tomcat 7 durchgeführt.

Dank im Voraus.

Doug

Antwort1

Gehen Sie in Eclipse zu Ihren Projekteinstellungen und dann zu den Java-Compiler-Einstellungen.

Was ist derCompiler-Kompatibilitätsstufe?

Wenn Sie dies mit Tomcat 7 mit Java 7 ausführen, sollte die Konformitätsstufe auf1.7. Wenn nicht, dann könnte das Ihr Problem sein. Es sollte aber kein Problem sein, solange es <= ist.1.7, hätten Sie Eclipse nicht zufällig für einen Snapshot von Java 8 konfiguriert?

In jedem Fall kann die Kenntnis dieses Wertes zur Aufklärung des Problems beitragen.

Antwort2

UnsupportedClassVersionErrortritt immer auf, wenn Sie „mit“ einer Version kompilieren (auf eine Version abzielen) und mit einer vorherigen Java-Version ausführen.

JAVA_HOMEsagt dem Betriebssystem nicht, wo es nach der Datei java.exe suchen soll. Das Betriebssystem nimmt diese Datei aus der Variable PATH. Deshalb wird empfohlen, am Anfang der PATHVariable den Pfad hinzuzufügen JAVA_HOME/bin.

Wenn dies nicht der Fall ist, könnte der Stacktrace (der Rest der Fehlermeldung) hilfreich sein. Insbesondere „Nicht unterstützte Major.Minor“ oder etwas Ähnliches und die Zahlen.

Weitere Informationen.

Antwort3

Wie stellen Sie Ihren Code auf Tomcat bereit, über Eclipse (WTP), oder erstellen Sie ein WAR mit einem bestimmten Build-Tool und stellen es dann manuell auf einem lokalen Tomcat bereit?

verwandte Informationen