IntelliJ中运行Tomcat抛出serialVersionUID不匹配的InvalidClassException异常
解决步骤
该问题本质是IntelliJ运行Tomcat时,类加载器优先加载了包含旧版本serialVersionUID的mypackage.MyClass类,而非修改后的新版类未被优先加载。可按以下步骤排查处理:
- 排查重复依赖
执行Maven依赖树检查是否存在多个包含该类的重复jar包:- 在IntelliJ右侧Maven面板点击搜索按钮,输入类名
MyClass,定位所有包含该类的依赖 - 若存在旧版本依赖,在对应
pom.xml中添加<exclusion>标签排除重复的旧依赖 - 检查本地Tomcat安装目录的
lib文件夹,是否存在包含该类的旧jar包,如有直接删除
- 在IntelliJ右侧Maven面板点击搜索按钮,输入类名
- 调整依赖加载优先级
打开File -> Project Structure -> 模块,选择你Tomcat部署的GUI模块,进入依赖标签页,将包含修改后MyClass的模块移到依赖列表的最顶部,确保IntelliJ优先加载该模块的代码,而非其他依赖中的旧类。 - 全量清理编译缓存
- 删除项目根目录下的
target文件夹、out文件夹,以及本地Maven仓库中该类所属模块的对应版本目录,之后对该模块单独执行mvn clean install命令,确保本地仓库存储的是最新版本代码。
- 删除项目根目录下的
- 类加载路径调试
打开IntelliJ的Tomcat运行配置,进入启动/连接标签页,在VM参数中添加-verbose:class,启动Tomcat后在控制台搜索mypackage.MyClass,即可看到该类的实际加载路径,直接定位旧类来源后删除即可。 - 检查生成代码目录标记
找到生成代码所在的目录,右键选择标记目录为 -> 源根,确保IntelliJ编译时会纳入该目录下的最新代码。
内容的提问来源于stack exchange,提问作者Brain
相关产品推荐
相关产品推荐

