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中文网其他相关文章!