必须在 pom.xml 中声明 war 并遵循标准 web 目录结构(含 src/main/webapp/web-inf/web.xml),maven-war-plugin 才会生效;执行 mvn clean package 后 war 生成于 target/ 目录。

要让 Maven 正确生成符合 Tomcat 要求的 WAR 包,并控制其内部结构,关键不是“额外加插件”,而是确保 maven-war-plugin 按预期工作——它默认就启用,但必须满足前提条件且可精细配置。
确认项目已正确定义为 WAR 类型
这是最常被忽略的前提。Maven 默认打包类型是 jar,哪怕你有 webapp 目录,不声明就仍打 JAR。
- 在
pom.xml的根<project></project>标签下,紧挨着<version></version>后、<dependencies></dependencies>前,必须写明:
<packaging>war</packaging>
拼写严格区分大小写,不能是 War 或 WAR;缺少这行,maven-war-plugin 根本不会被触发。
遵循标准 Web 目录结构
maven-war-plugin 依赖约定优于配置。它默认只扫描特定路径,结构不对会导致资源丢失或部署失败。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
src/main/webapp/是 Web 资源根目录,必须存在; -
src/main/webapp/WEB-INF/必须存在,且建议保留web.xml(即使 Servlet 3.0+ 支持注解,Tomcat 仍依赖它识别应用); - Java 类放在
src/main/java/,配置文件放src/main/resources/,它们会自动归入WEB-INF/classes/; - 第三方 JAR 自动复制到
WEB-INF/lib/,无需手动操作。
用 maven-war-plugin 配置定制输出结构
若需调整 WAR 内部布局(如重命名上下文路径、排除某些文件、指定 web.xml 位置),需显式配置插件。
- 在
pom.xml的<build><plugins></plugins></build>中添加:
<plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-war-plugin</artifactid><version>3.3.2</version><configuration><warname>myapp</warname><!-- 生成的 WAR 文件名,不含 .war --><failonmissingwebxml>false</failonmissingwebxml><!-- 若不用 web.xml,设为 false --><webresources><resource><directory>src/main/webapp/extra</directory><includes><include>**/*.js</include></includes></resource></webresources><warsourcedirectory>src/main/webapp</warsourcedirectory></configuration></plugin>
常用配置项:<warname></warname> 控制最终 WAR 文件名;<failonmissingwebxml></failonmissingwebxml> 关闭对 web.xml 的强制检查;<webresources></webresources> 可追加额外静态资源目录;<warsourcedirectory></warsourcedirectory> 显式指定 Web 根目录(默认就是 src/main/webapp,一般不用改)。
验证与构建结果位置
执行命令:mvn clean package。
- 成功后,WAR 文件生成在项目根目录下的
target/文件夹中; - 可直接解压该 WAR 文件,检查内部是否含
META-INF/和WEB-INF/,后者下应有classes/、lib/和web.xml; - 若发现类没进去、JS 缺失或
WEB-INF不见,优先回查<packaging></packaging>和目录结构,而非插件配置。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










