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
相关产品推荐
相关产品推荐

