
一、引言
对于 IntelliJ IDEA 新手来说,Web 项目 WAR 包打包常因步骤多、配置深而卡壳,且多数教程仅讲"打包"却忽略"部署验证"和"问题排查"。本文将从前置准备→核心配置→打包验证→Tomcat 部署→问题解决,带你完整走通流程,避开 90% 的常见坑。
二、前置准备:确认基础配置(避免起步就错)
在开始打包前,先检查 3 个关键前提,缺失任一环节可能导致后续操作失败:
- 确认项目类型 :打开项目结构(快捷键
Shift+Ctrl+Alt+S
),在「Modules」中查看模块类型是否为「Web Application」,若不是,需右键模块→「Add Framework Support」→勾选「Web Application」。 - 配置 JDK/SDK:在「Project Structure」→「Project」中,确认「Project SDK」已选择本地 JDK(建议 1.8 及以上),「Project language level」与 JDK 版本匹配(如 JDK 1.8 对应 level 8)。
- 准备 Tomcat(部署用) :本地已安装 Tomcat(建议 8.x/9.x 版本),并记住其安装路径(如
D:\apache-tomcat-9.0.60
),后续部署需用到。
三、核心配置:Artifacts 配置(打包关键步骤)
此模块是打包核心,按"新建工件→补全目录→关联编译输出"三步拆解,每步附操作目的,避免盲目点击:
3.1 新建 Web Archive 工件(即 WAR 包模板)
- 操作步骤:打开「Project Structure」→选择左侧「Artifacts」→点击界面左上角「+」号→依次选择「Web Application: Archive」→「Empty」。
- 操作目的:创建一个空的 WAR 包模板,后续将项目文件、编译结果逐步添加到该模板中。
3.2 配置 Web 根目录(确保页面文件能被访问)
- 操作步骤:在「Artifacts」右侧「Output Layout」面板中,右键「」→选择「Add Content Directory」→在弹窗中选中项目的 Web 根目录(通常名为
WebContent
或webapp
,需包含index.html
、WEB-INF
文件夹)。 - 操作目的:Web 根目录是项目对外访问的入口,缺失会导致部署后无法找到页面(如 index.html)。
3.3 补全 WEB-INF/classes 目录(存放编译后的代码)
- 操作步骤:
- 在「Output Layout」面板中,展开已添加的 Web 根目录→找到「WEB-INF」文件夹(若没有则右键 Web 根目录→「New Folder」创建)。
- 右键「WEB-INF」→「New Folder」→命名为
classes
(必须小写,Web 项目标准目录)。
- 操作目的:
classes
目录用于存放项目编译后的.class
文件(如 Controller、Service 类),缺失会导致 Tomcat 无法加载业务逻辑代码。
3.4 关联 Module Output(自动导入编译结果)
- 操作步骤:在「Output Layout」面板中,右键「classes」目录→选择「Add Module Output」→在弹窗中选择当前 Web 项目的模块(如
demo-web
)→点击「OK」。 - 操作目的:将项目编译后的
.class
文件自动同步到classes
目录,无需手动复制,避免遗漏文件。
四、打包与验证:确保 WAR 包可用
4.1 执行打包操作
- 操作步骤:点击顶部菜单栏「Build」→「Build Artifacts」→在弹窗中选择已配置的 Artifact(如
unnamed:war
)→选择「Build」(首次打包)或「Rebuild」(更新后重新打包)。 - 查找 WAR 包:打包完成后,WAR 包默认存放在项目根目录下的
out\artifacts\
文件夹中(如demo\out\artifacts\unnamed.war
)。
4.2 验证 WAR 包有效性(避免白忙活)
- 验证方法:用压缩软件(如 WinRAR)打开 WAR 包,检查以下 3 点:
- 根目录下是否有
index.html
等页面文件。 WEB-INF
文件夹下是否有classes
目录,且classes
内有.class
文件。WEB-INF
文件夹下是否有web.xml
(若项目用注解配置则可无,但传统项目需包含)。
- 根目录下是否有
- 验证目的:提前排查打包缺陷,避免带着问题去部署,减少后续排错时间。
五、Tomcat 部署:从打包到访问全流程
- 部署步骤:
- 将验证通过的 WAR 包复制到 Tomcat 的
webapps
目录下(如D:\apache-tomcat-9.0.60\webapps
)。 - 进入 Tomcat 的
bin
目录,双击startup.bat
(Windows)或执行./startup.sh
(Linux/Mac)启动 Tomcat。 - 访问测试:打开浏览器,输入
http://localhost:8080/[WAR包名]/index.html
(如 WAR 包名为demo.war
,则路径为http://localhost:8080/demo/index.html
),能正常显示页面即部署成功。
- 将验证通过的 WAR 包复制到 Tomcat 的
- 注意事项:若 Tomcat 启动失败,可查看
logs
目录下的catalina.out
文件,排查端口占用、依赖冲突等问题。
六、常见问题解决方案(打包/部署高频坑)
6.1 问题 1:WAR 包内无 lib 依赖(第三方 jar 缺失)
- 现象:部署后报错"ClassNotFoundException"(找不到 Spring、MyBatis 等依赖类)。
- 原因:Artifacts 配置中未添加项目依赖的库文件。
- 解决方案:在「Artifacts」→「Output Layout」中,右键「WEB-INF」→选择「Add Library Files」→勾选项目依赖的库(如
Spring Core
、MyBatis
)→点击「OK」,重新打包。
6.2 问题 2:classes 目录为空(无 .class 文件)
- 现象:打开 WAR 包,
WEB-INF/classes
目录下无任何文件。 - 原因:未关联 Module Output,或代码未编译。
- 解决方案:
- 重新执行「3.4 关联 Module Output」步骤,确认模块选择正确。
- 先执行「Build」→「Rebuild Project」编译项目,再重新打包。
6.3 问题 3:部署后访问 404(页面找不到)
- 现象:浏览器输入地址后显示"404 Not Found"。
- 原因:WAR 包未被 Tomcat 解压,或访问路径错误,或 Tomcat 端口被占用。
- 解决方案:
- 检查
webapps
目录:启动 Tomcat 后,若 WAR 包未自动解压(无同名文件夹),删除 WAR 包,重启 Tomcat 重试。 - 核对访问路径:确保路径中包含 WAR 包名(如
http://localhost:8080/demo/index.html
,而非http://localhost:8080/index.html
)。 - 检查端口:打开
conf/server.xml
文件,查看<Connector port="8080"
是否被占用,若占用则修改端口(如改为 8081),重启 Tomcat。
- 检查
七、场景扩展:适配 Maven/多模块项目
7.1 Maven 项目打包(更简洁,无需手动配置 Artifacts)
-
操作步骤:打开右侧「Maven」面板→展开项目→「Lifecycle」→双击「package」,Maven 会自动编译、打包,WAR 包存放在
target
目录下。 -
自定义配置:若需修改 WAR 包名称,在
pom.xml
中添加:xml<build> <finalName>my-demo</finalName> <!-- 自定义 WAR 包名 --> </build>
7.2 多模块项目打包(仅打包 Web 模块)
- 操作要点:多模块项目(如
demo-parent
下有demo-service
、demo-web
),仅需对demo-web
模块(Web 类型)执行上述打包步骤,无需处理父模块或服务模块。
八、总结
本文从"配置→打包→验证→部署→排错"覆盖 WAR 包全流程,核心是确保「Artifacts 配置完整」和「提前验证打包结果」。若遇到其他问题,可在评论区留言,我会及时补充解决方案。
你只需将模板中的「示例名称」(如 demo-web
、unnamed.war
)替换为实际项目信息,再补充对应步骤的截图,就能生成一篇逻辑清晰、实用性强的新版博客。需要我帮你针对某一模块(如"Maven 项目打包")补充更详细的操作截图说明吗?