如何處理 Java 中的「類別檔案版本錯誤」錯誤
1. 概述
在處理 Java 專案時,設定新專案或更新或新增依賴項時的常見錯誤是「類別檔案版本錯誤」錯誤。
在本教程中,我們將了解發生此錯誤的原因並探索兩種解決方案。
2. 原因
要了解根本原因,我們需要更多地了解類別文件。
每當我們編譯 Java 程式碼時,都會為正在編譯的檔案中包含的每個類別建立一個.class
檔案。這些.class
檔案的部分元資料是版本號,與用於編譯程式碼的 Java 目前主版本號相對應。
對於最常見的 Java 版本,這些類別版本號碼為 Java 21 的 65.0、Java 17 的 61.0、Java 11 的 55.0 和 Java 8 的 51.0 。如果我們使用不同版本的 Java,我們可以根據需要加減一個來找出對應的類別文件版本號。
在執行時,Java 會查看每個.class
文件,並要求執行階段環境的版本號碼大於或等於用於編譯.class
檔案的版本號。此版本號要求是由於 Java 的向後相容性機制。這意味著如果我們使用 Java 17 運行程式碼,我們可以使用使用 Java 17 或早期版本的 Java 編譯的任何類別檔案。但是,如果我們遇到使用 Java 21 編譯的.class
文件,那麼我們會遇到錯誤「class 檔案版本 65.0 錯誤,應該是 61.0」。
3. 解決方案
正如我們剛剛了解到的,「類別檔案版本錯誤」錯誤是由使用比運行時使用的版本更高的 Java 版本編譯的程式碼引起的。
3.1.升級Java
我們將探索的第一個解決方案是升級我們的執行環境。第一步是下載並安裝 Java 的升級版本。對於 Windows、macOS 和 Ubuntu,安裝和升級 Java 的步驟可能會有所不同。
假設我們遇到錯誤「類別檔案版本錯誤 61.0 (Java 17),應該是 55.0 (Java 11)」。然後,我們可以透過安裝 Java 17+ 版本並更新管理 Java 編譯器版本的建置屬性來解決此問題。如果使用 Maven,我們只需更新pom.xml
檔:
<properties>
<maven.compiler.release>17</maven.compiler.release>
</properties>
3.2.降級依賴
在某些情況下,我們可能無法選擇升級 Java 環境。為此,我們需要診斷哪個依賴項正在建立錯誤。
以 Spring 依賴項為例,目前主要發布版本是 Spring Framework 6 和 Spring Boot 3。
這意味著如果我們使用舊版本的 Java,我們可以減少 Spring 依賴關係以繼續運行。不過,應該指出的是,對這些舊版 Spring 的開源支援已經結束。
此外,當依賴項降級時,我們可能會遇到其他編譯或執行時錯誤。如果正在使用庫的較新功能,則尤其如此,因為它們可能在舊版本中不可用。特別是,降級 Spring Framework 或 Spring Boot 可能需要付出巨大的努力。
4. 結論
我們現在有兩種方法來修復“類文件版本錯誤”錯誤。
降級依賴項通常可以更快地解決問題。但是,我們可能會使用沒有最新安全性修補程式或支援的版本。這也可能引入編譯或運行時錯誤,因為程式庫可能會進行重大更改以恢復到早期版本。
另一方面,升級Java建置和執行時間環境允許我們使用最新的依賴項,但由於業務限制,這可能不是可用的解決方案。