如何處理 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建置和執行時間環境允許我們使用最新的依賴項,但由於業務限制,這可能不是可用的解決方案。