开发WebService时遭遇Invalid byte tag in constant pool:19错误求解决
解决Tomcat 8.0 + Java 8下的
ClassFormatException: Invalid byte tag in constant pool: 19 这个问题我之前帮不少开发者排查过,本质是Tomcat 8.0内置的**BCEL(Byte Code Engineering Library)**版本过低,无法识别Java 8编译生成的类文件里的新常量池项(标签19对应的是INVOKEDYNAMIC常量,Java 7就已引入,但早期Tomcat 8.0的BCEL库没做适配)。下面给你几个靠谱的解决思路,按优先级排序:
优先升级Tomcat 8.0到维护版本
Tomcat 8.0.x的后期版本(比如8.0.53及以上)已经更新了内置的BCEL库,完全支持Java 8的字节码。直接升级到对应大版本的最新维护版即可,不用跳转到更高大版本(比如8.5或9),能最大程度保证现有代码的兼容性。手动替换BCEL库(不升级Tomcat的备选方案)
如果暂时不想升级整个Tomcat,可以手动替换Tomcat安装目录下lib文件夹里的bcel.jar文件,换成支持Java 8的BCEL版本(比如BCEL 6.0及以上)。注意替换前一定要备份原文件,避免出现依赖冲突问题。检查代码编译配置
确认你的项目代码是严格用Java 8编译的,不要使用Java 9及以上版本的编译器(更高版本的字节码Tomcat 8.0本身就不支持)。可以在构建工具里明确指定编译版本:- Maven配置示例:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> - Gradle配置示例:
compileJava { sourceCompatibility = '1.8' targetCompatibility = '1.8' }
- Maven配置示例:
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

