从Eclipse转Intellij后,RestService WAR本地正常远程Tomcat报404
刚从Eclipse转IntelliJ确实容易踩这类配置坑,我帮你梳理几个最可能的原因,你挨个排查下:
1. 检查IntelliJ的WAR打包完整性
Eclipse默认会把所有依赖打包进WAR,但IntelliJ的默认配置可能只包含项目自身代码,导致远程部署时缺失依赖:
- 打开
File → Project Structure → Artifacts,查看你的WAR artifact配置:- 确认
Output Layout里存在WEB-INF/lib目录,且所有项目依赖都被添加进去(右键依赖选择Put into Output Root) - 检查
WEB-INF/web.xml是否在正确路径下,没有被遗漏
- 确认
2. 上下文路径不匹配
IDE内部署时IntelliJ可能帮你设置了自定义上下文路径(比如根路径/),但远程Tomcat默认会用WAR包文件名作为上下文路径:
- 比如IDE里访问
http://localhost:8080/api/xxx,远程WAR名为myapp.war时,需要访问http://remote-server:8080/myapp/api/xxx - 想保持根路径的话,可将WAR重命名为
ROOT.war,或在Tomcatconf/server.xml里配置<Context>节点指定路径
3. 编译JDK版本与远程Tomcat不兼容
远程Tomcat对JDK版本有要求(比如Tomcat 8.5仅支持JDK 8+),如果IntelliJ用更高版本编译,会导致部署失败:
- 检查IntelliJ配置:
File → Project Structure → Project,确认Project SDK和Project language level与远程服务器JDK版本一致(远程执行java -version查看)
4. Web资源路径配置差异
Eclipse和IntelliJ对Web资源(静态文件、JSP等)的默认路径处理不同:
- 打开
Project Structure → Modules,选中Web模块,检查Web标签页的Web Resource Directories是否正确配置,确保所有需要的资源都被包含到WAR中
5. 手动执行完整构建命令
有时候IntelliJ的“Build Artifact”可能跳过部分构建步骤,导致WAR不完整:
- 用终端手动执行构建命令:
- Maven项目:
mvn clean package - Gradle项目:
gradle clean war
再把生成的WAR包传到服务器尝试部署
- Maven项目:
6. 查看远程Tomcat日志定位问题
这是最直接的排查方式!去远程服务器Tomcat的logs目录,查看catalina.out或localhost.log:
- 如果日志出现
ClassNotFoundException,说明依赖没打包进WAR - 如果是
ServletException,大概率是web.xml里的映射配置有误 - 权限问题也会在日志里明确体现,比如Tomcat没有读取WAR包的权限
内容的提问来源于stack exchange,提问作者Jeremy Villa
相关产品推荐
相关产品推荐

