JSP サイトをホストするために Tomcat サーバーを設定しています。Eclipse でテスト アプリケーションを作成し、すべてが機能していることを確認しました。このアプリケーションは、JSP でテキストを印刷し、カスタム クラスの関数を呼び出して、これもテキストを印刷するだけです。Eclipse (Tomcat と同じコンピューターで実行) では問題なく動作しますが、プログラムを WAR ファイルにコンパイルして Tomcat から実行しようとすると、次の例外が発生します。
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)
...
ページを更新すると、エラーが に変わり、UnsupportedClassVersionError
「major.minor」の部分が失われることに注意してください。何が起こっているのかわかりません。
Google によると、これはランタイムがコンパイラーより古いバージョンであることに関係しているとのことですが、私が知る限り、Eclipse と Tomcat はどちらも最新のバージョンを使用しています。これらは同じコンピューター上にあるので、同じ JAVA_HOME 変数を使用しているはずですよね? 私はさまざまな JRE / JDK インストールを持っており、そのいくつかを JAVA_HOME として試しましたが、何も変化がありませんでした (そのたびに Tomcat を再起動しています)。現時点では、次のようになっています。
JAVA_HOME = C:\Program Files\Java\jdk1.7.0_25
Path = C:\Program Files\Java\jdk1.7.0_25\bin; ...
Tomcat がこのバージョンの Java を使用するために設定する必要がある他のものはありますか? または、JAVA_HOME を指定する必要がある別の場所がありますか? JRE インストールもいくつか試しましたが、何も見つかりません。これについて何かアイデアはありますか?
これらはすべて、Tomcat 7 を使用して Windows Server 2008 R2 上で実行されています。
前もって感謝します。
ダグ
答え1
Eclipse で、プロジェクトの設定に移動し、Java コンパイラの設定に移動します。
何ですかコンパイラ準拠レベル?
Tomcat 7とJava 7でこれを実行する場合、コンプライアンスレベルは次のように設定する必要があります。1.7そうでなければ、それが問題かもしれません。ただし、<=1.7、Java 8 のスナップショット用に Eclipse を構成したのではないでしょうか?
いずれにしても、この値を知ることは問題を明らかにするのに役立つかもしれません。
答え2
UnsupportedClassVersionError
常に、1 つのバージョン (1 つのバージョンをターゲットとする) でコンパイルし、以前の Java バージョンで実行すると表示されます。
JAVA_HOME
オペレーティング システムに java.exe ファイルをどこで探すべきかを伝えません。オペレーティング システムは PATH 変数からそのファイルを取得します。そのため、変数の先頭にPATH
パスを追加することをお勧めしますJAVA_HOME/bin
。
そうでない場合は、スタック トレース (エラー メッセージの残りの部分) が役に立つ可能性があります。特に、「Unsupported major.minor」などの部分と数字が役立ちます。
追加情報。
答え3
Eclipse (WTP) 経由でコードを Tomcat にデプロイしていますか? それとも、特定のビルド ツールを使用して WAR を構築し、それを手動でローカル Tomcat にデプロイしていますか?