Tomcat 7 拋出不支援的類別版本錯誤

Tomcat 7 拋出不支援的類別版本錯誤

我正在設定 Tomcat 伺服器來託管 JSP 網站。我在 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)
    ...

我應該指出,一旦刷新頁面,錯誤就會更改為 justUnsupportedClassVersionError並丟失“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 安裝,但一無所獲。有什麼想法嗎?

這一切都是在 Windows Server 2008 R2 上使用 Tomcat 7 完成的。

提前致謝。

道格

答案1

在 Eclipse 中,前往“專案首選項”,前往“Java 編譯器”設定。

是什麼編譯器合規級別

如果您使用具有 Java 7 的 Tomcat 7 執行此程序,則合規性等級應設定為1.7。如果不是,那麼這可能是你的問題。雖然只要 <= 就應該沒問題1.7,您不會為 Java 8 的快照配置 eclipse 嗎?

不管怎樣,了解這個值可能有助於闡明問題。

答案2

UnsupportedClassVersionError當您「使用」一個版本(針對一個版本)進行編譯並使用先前的 java 版本執行時,總是會出現。

JAVA_HOME不告訴作業系統應該在哪裡找 java.exe 檔案。作業系統將從 PATH 變數中取得該檔案。這就是為什麼建議在PATH變數的開頭添加 path JAVA_HOME/bin

如果不是這種情況,堆疊追蹤(錯誤訊息的其餘部分)可能會很有用。特別是「不支援的主要.次要」或類似的內容,以及數字。

附加資訊

答案3

您如何透過 Eclipse (WTP) 將程式碼部署到 Tomcat,還是使用特定的建置工具建置 WAR 並手動將其部署到本機 Tomcat?

相關內容