ClassFormatException:常量池中的字節標記無效
背景:
移植Web時將應用程式從Tomcat 7 複製到另一台具有相同Tomcat 版本但使用Java 8 的伺服器時,觀察到Tomcat 啟動成功,但在catalina.out 日誌中產生錯誤:
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15
原因:
該錯誤源自Tomcat 使用的字節碼工程庫(BCEL) 的問題,在處理新的Java 8 字節碼時遇到困難。
解決方案1:停用註釋掃描
如果在web.xml 中啟用了註釋掃描(metadata-complete="true"),則停用它可以讓應用程式運行而不會遇到錯誤。
解決方案 2:更新到 Tomcat 7.0.53 或更高版本
從 Tomcat 7.0.53 開始,編譯器已更新,改進了 Java 8 支援。此更新解決了使用註釋掃描和非 Java 8 程式碼的應用程式的問題。
解決方案3:跳過某些Jar 檔案
適用於需要註解掃描且該應用程式使用Java 8 程式碼,請將以下行新增至catalina. properties:
junit.jar,junit-*.jar,ant-launcher.jar,\ jfxrt.jar,nashorn.jar
在註解掃描期間跳過這些Jar 檔案。
以上是以下是一些標題選項,請記住問答格式: 簡明扼要: * ClassFormatException:常數池中無效的位元組標記 - 為什麼以及如何修復它? * Tomcat 7 和的詳細內容。更多資訊請關注PHP中文網其他相關文章!