myeclipse自动部署到工作区临时目录(如.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/项目名),而非tomcat webapps;deploy按钮仅同步至该临时路径,export war才生成标准可交付war包。

MyEclipse 默认走的是自动发布路径,但这个“自动”不等于“部署到 tomcat/webapps 目录下”——它实际把项目放在了 MyEclipse 自己管理的临时目录里,和你手动复制文件到 webapps 是两套逻辑。
MyEclipse 的自动部署到底部署到哪了
MyEclipse 启动 Tomcat 时,并不会把 WebRoot 内容原样拷进 $TOMCAT_HOME/webapps/项目名。它默认使用内部工作区路径(比如 .metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/项目名),Tomcat 实际加载的是这个临时目录下的内容。
- 你在浏览器能访问
http://localhost:8080/abc,不代表$TOMCAT_HOME/webapps/abc存在 - 这个临时路径由 MyEclipse 控制,重启 IDE 或清理服务器缓存后可能重建,不可直接用于生产交付
-
WEB-INF/classes里的 class 文件是编译后实时同步过去的,不是从src手动复制的
手动部署:复制 WebRoot 到 webapps 的注意事项
如果你明确需要把项目放进 tomcat/webapps(比如给运维打包、做灰度验证、或脱离 IDE 运行),就得自己动手复制,但不能无脑拖拽:
Eclipse IDE 是一款由 Eclipse 基金会管理的开源、跨平台集成开发环境。其核心基于 Java 构建,通过强大的插件架构可扩展支持 C/C++、Python、PHP 等多种编程语言。它提供丰富的代码编辑、调试和重构工具,并紧密集成 Git、Maven 等现代开发工具链,是全球众多开发者首选的 Java 开发利器。
- 必须确保
WebRoot下有完整的WEB-INF目录,且其中包含web.xml和编译好的classes(或lib中有依赖 jar) - 不要漏掉
WebRoot/WEB-INF/classes—— 它对应src编译结果;如果没编译过,先右键项目 →Build Project - 复制后要删掉
webapps/项目名/WEB-INF/classes里的 .java 源文件(MyEclipse 有时会误塞进去) - 启动 Tomcat 前,确认
webapps下没有同名残留目录,否则可能加载旧版本
Deploy 按钮和 Export WAR 的本质区别
MyEclipse 工具栏上的 Deploy 按钮,只是触发一次“同步到 MyEclipse 管理的临时路径”,而 Export → WAR file 是真正生成标准 WAR 包:
-
Deploy不生成任何文件,只刷新运行时环境;无法被其他 Tomcat 实例复用 -
WAR export会按 Servlet 规范打包:WEB-INF/web.xml、WEB-INF/classes、WEB-INF/lib全都包含,可直接丢进任意 Tomcat 的webapps - 导出 WAR 前,MyEclipse 会自动编译
src并合并进WEB-INF/classes,但不会校验web.xml是否合法——错误的 schema 版本会导致 Tomcat 启动失败并报org.xml.sax.SAXParseException
为什么改不了 Server Location 里的 Deploy path
MyEclipse 没有 Eclipse 那种 Use Tomcat installation 的配置开关,它的部署路径是硬编码在插件逻辑里的。如果你看到 Server 视图里 Server Locations 灰掉、无法编辑:
- 不是因为 Tomcat 没启动,而是 MyEclipse 的 Tomcat 集成机制压根不暴露这个选项
- 强行想改路径?唯一办法是关闭 MyEclipse 的自动部署,改用外部 Tomcat + 手动复制或 WAR 导入
- 别去动
$TOMCAT_HOME/conf/Catalina/localhost/xxx.xml—— MyEclipse 不读这个,改了也无效
真正的区别不在操作步骤多寡,而在目标路径是否可控:自动部署服务于开发调试,手动/WAR 部署才面向交付。别指望点一下 Deploy 就能得到可用于生产的 webapps/项目名 目录结构。










