
本文详解 Maven 项目生成 .war 文件的核心配置:必须在 pom.xml 中显式声明 war,并确保项目遵循标准 Web 应用目录结构(含 src/main/webapp/WEB-INF/web.xml 等关键路径)。
本文详解 Maven 项目生成 .war 文件的核心配置:必须在 pom.xml 中显式声明 `
在使用 Jenkins + Maven 构建 Java Web 应用并部署到 Tomcat 的 DevOps 流程中,若构建产物始终是 .jar 而非预期的 .war,导致后续 Tomcat 部署失败,根本原因通常不是 Jenkins 或 Tomcat 配置问题,而是 Maven 项目自身未被正确定义为 Web 模块。Maven 默认打包类型为 jar,要生成可部署的 WAR 包,需同时满足两个前提条件:
✅ 1. 正确设置 类型
在项目的 pom.xml 根
<packaging>war</packaging>
⚠️ 注意:该标签必须位于
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-web-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging> <!-- 关键:此处必须为 war -->
<!-- 其他配置... -->
</project>✅ 2. 遵循标准 Web 目录结构
Maven War 插件(maven-war-plugin)默认期望项目具备以下结构:
my-web-app/
├── pom.xml
└── src/
└── main/
├── java/ # Java 源码(如 Servlet、Controller)
├── resources/ # 配置文件(如 application.properties)
└── webapp/ # Web 资源根目录(必需!)
├── WEB-INF/
│ └── web.xml # 可选(Servlet 3.0+ 可以注解替代,但建议保留)
├── index.jsp
└── static/ # CSS/JS/图片等静态资源? 验证技巧:执行 mvn clean package -X(开启调试日志),观察输出中是否出现 Using webappDirectory: .../src/main/webapp —— 若路径错误或缺失,说明结构不合规。
⚙️ 补充说明与常见误区
-
无需额外配置插件:Maven 3.0+ 自动绑定 maven-war-plugin 到 package 生命周期,只要
war 存在且目录结构正确,运行 mvn clean package 即生成 target/my-web-app-1.0-SNAPSHOT.war。 - web.xml 不是强制要求:Servlet 3.0+ 支持 @WebServlet 等注解,web.xml 可为空或省略,但 src/main/webapp/WEB-INF/ 目录必须存在(否则插件报错)。
- Jenkins 构建无需修改:确认 Jenkins 构建步骤调用的是 mvn clean package(而非 mvn clean install 后误取本地仓库 jar),产物路径应为 target/*.war。
- IDE 同步提示:在 IntelliJ 或 Eclipse 中修改 pom.xml 后,务必点击 “Reload project” 使配置生效,避免 IDE 缓存旧设置。
✅ 最终验证步骤
- 检查 pom.xml 是否含
war ; - 确认 src/main/webapp/WEB-INF/ 目录存在(即使 web.xml 为空);
- 终端执行:mvn clean package;
- 检查 target/ 目录下是否生成 .war 文件(而非 .jar);
- 手动将该 WAR 文件复制到 Tomcat 的 webapps/ 目录,启动 Tomcat 验证部署。
遵循以上两点核心配置,即可稳定产出符合 Tomcat 要求的 WAR 包,彻底解决 Jenkins 构建后部署失败的问题。










