
本文详解 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 部署失败,根本原因通常在于 Maven 项目未被正确定义为 Web 模块。Maven 默认打包类型为 jar,只有显式声明且结构合规时,才会触发 maven-war-plugin 并生成可部署的 WAR 包。
✅ 关键配置一:修改 pom.xml 的 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" -->
<!-- 其他配置(dependencies, plugins 等) -->
</project>? 提示:若
标签缺失或拼写错误(如 war 写成 War 或 WAR),Maven 仍会回退至默认 jar 类型——这是新手最常见的疏漏。
✅ 关键配置二:遵循标准 Web 项目目录结构
Maven War 插件默认依赖约定优于配置(Convention over Configuration)。项目必须包含 src/main/webapp/ 目录,且其中至少应有 WEB-INF/web.xml(即使为空或使用 Servlet 3.0+ 注解驱动,该目录结构仍为必需):
my-web-app/
├── pom.xml
└── src/
└── main/
├── java/ # Java 源码(如 Servlet、Controller)
├── resources/ # 配置文件(application.properties 等)
└── webapp/ # Web 资源根目录(Maven War 插件强制要求)
├── WEB-INF/
│ └── web.xml # 必需存在(可为空文件,但目录和文件名不可少)
├── index.html
└── static/ # 如 CSS、JS、图片等静态资源⚠️ 注意事项:
- 若项目使用 Spring Boot,请勿设置
war 并手动部署到外部 Tomcat——Spring Boot 官方推荐使用 jar + 内嵌容器;如确需 WAR,须额外继承 SpringBootServletInitializer 并调整主类。- web.xml 在 Servlet 3.0+ 中虽非功能必需,但 maven-war-plugin 仍要求 WEB-INF/ 目录存在,否则构建可能静默失败或生成不完整 WAR。
- 可通过 mvn clean package -X 查看详细日志,确认是否调用了 maven-war-plugin:3.x:war 目标。
✅ 验证与调试步骤
- 本地验证:执行 mvn clean package,检查 target/ 目录下生成的是 my-web-app-1.0-SNAPSHOT.war(而非 .jar);
- 检查插件生效:运行 mvn help:effective-pom | grep -A 5 "maven-war-plugin",确认插件已自动引入;
- Jenkins 同步:确保 Jenkins 构建任务中使用的 pom.xml 是已更新版本(Git 分支、路径配置无误);
- Tomcat 兼容性:WAR 包需与目标 Tomcat 版本匹配(如 Tomcat 9 要求 Servlet API 4.0,对应 Java 8+)。
完成以上两步配置后,Maven 将自动启用 maven-war-plugin,生成符合 Jakarta EE 规范的 WAR 包,可直接上传至 Tomcat 的 webapps/ 目录或通过 Manager App 部署。对于 Java 新手,牢记口诀:“packaging 写 war,webapp 目录不能垮”——这是 Web 项目走向生产部署的第一道坚实门槛。










