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

Eclipse与Tomcat部署问题:修改代码后必须清理项目才能重启

Eclipse+Tomcat热部署必清项目?Logger类找不到问题解决

问题根源

热部署时,Eclipse编译的class文件未同步到Tomcat部署目录,或者Tomcat的类加载器未释放旧的类资源,导致Log4j的Logger类加载失败,触发ClassNotFoundException/NoClassDefFoundError。清理项目能重置编译缓存,所以暂时解决,但本质是同步或类加载的问题。

解决办法

1. 核对Eclipse编译输出路径

  • 右键项目→Properties→Java Build Path→Output Folder
  • 确认输出目录是/bin或/build/classes,且该目录被Tomcat识别为部署的类目录
  • 勾选Allow output folders for source folders,保证每个源码包的编译输出路径正确

2. 调整Tomcat的发布设置

  • 打开Servers视图,双击Tomcat实例
  • 找到Publishing选项,选择Automatically publish when resources change,将发布间隔设为1-2秒
  • 勾选Remove modules when stopped,防止停服后残留旧类文件
  • 切换到Modules标签,检查项目的Deploy path为webapps/MyApp,Source指向当前项目

3. 确保Log4j依赖正确部署

  • 将Log4j的jar包放进项目的WEB-INF/lib,不要仅在Build Path里引用(Tomcat的类加载器只会扫描WEB-INF/lib目录)
  • 使用Maven/Gradle时,确认依赖scope为compile,确保打包时自动将依赖放入WEB-INF/lib
  • 检查Deployment Assembly(右键项目→Properties→Deployment Assembly),确保Log4j相关jar包在部署列表中

4. 手动清理Tomcat缓存

  • 关闭Tomcat,删除Tomcat安装目录下的work/Catalina/localhost/MyApp文件夹
  • 删除项目的target(Maven)或build目录,重新编译
  • 在Eclipse中执行Project→Clean,选择当前项目彻底清理编译缓存

5. 优化Eclipse自动编译设置

  • 打开Window→Preferences→Java→Compiler→Building
  • 勾选Build automatically,确保修改代码后立即编译
  • 取消勾选Abort build when build path errors occur,避免小错误导致编译中断
  • 在Output folder部分勾选Refresh resources upon completion,保证编译后的文件同步到部署目录

验证方法

修改任意一行代码,等待Eclipse自动编译,查看Tomcat控制台是否报错。若仍有问题,重启一次Tomcat后再尝试热部署,此时应该无需再清理项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:26:29