You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat运行Web服务抛出ClassFormatException异常求助(Java9.0+Tomcat7.0.47)

解决Tomcat 7.0.47 + Java 9环境下的ClassFormatException问题

我之前帮同事排查过一模一样的问题,折腾了好一阵才找到根源——Tomcat 7.0.47自带的BCEL类库根本不支持Java 9及以上版本的字节码格式。你看到的Invalid byte tag in constant pool: 19,就是因为Java 9引入了旧BCEL无法识别的常量池类型,导致类加载时解析字节码失败。

给你几个可行的解决方案,按优先级排序:

  • 优先升级Tomcat版本:Tomcat 8.5及以后的分支才正式兼容Java 9+,建议直接升级到Tomcat 8.5.x或者9.x版本,这些版本的BCEL库已经更新,能完美处理新的字节码结构。而且Tomcat7早就停止官方维护了,升级也能获得后续的安全补丁。
  • 临时降级Java版本:如果暂时没法升级Tomcat,那就把Java环境换回Java 8,Tomcat7对Java8的支持是完全没问题的,这样能快速绕过这个异常。
  • 调整编译配置:如果必须留在Java9环境,那要确保你的Web应用代码是按Java8的字节码标准编译的。比如用Maven的话,在pom.xml里配置maven-compiler-plugin:
    <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>
    
    Gradle的话就在build.gradle里添加:
    sourceCompatibility = '1.8'
    targetCompatibility = '1.8'
    
    这样编译出来的字节码是Tomcat7能识别的格式,也能解决问题。

内容的提问来源于stack exchange,提问作者user3503297

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:16:16