在 Maven 项目中,可以使用 Tomcat Maven 插件(tomcat7-maven-plugin
或 tomcat-maven-plugin
)来直接部署 WAR 文件到 Tomcat 服务器,而无需手动复制 WAR 文件到 webapps
目录。以下是详细的使用方法:
1. 配置 Tomcat Maven 插件
在 pom.xml
的 <plugins>
部分添加以下配置:
使用 tomcat7-maven-plugin
(Tomcat 7+)
<build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><!-- Tomcat 管理后台 URL --><url>http://localhost:8080/manager/text</url><!-- Maven settings.xml 中配置的 server ID --><server>tomcat-admin</server><!-- 部署的上下文路径(如 /myapp) --><path>/myapp</path><!-- 可选:用户名和密码(也可以在 settings.xml 中配置) --><username>admin</username><password>admin</password></configuration></plugin></plugins>
</build>
使用 tomcat-maven-plugin
(Tomcat 6,较旧)
<plugin><groupId>org.codehaus.mojo</groupId><artifactId>tomcat-maven-plugin</artifactId><version>1.1</version><configuration><url>http://localhost:8080/manager/html</url><server>tomcat-admin</server><path>/myapp</path></configuration>
</plugin>
2. 配置 Tomcat 管理用户
Tomcat 需要启用 Manager App 并配置用户权限才能通过 Maven 插件部署。
修改 conf/tomcat-users.xml
<tomcat-users><role rolename="manager-script"/> <!-- 允许使用 /manager/text API --><role rolename="manager-gui"/> <!-- 允许访问 /manager/html 界面 --><user username="admin" password="admin" roles="manager-script,manager-gui"/>
</tomcat-users>
- 重启 Tomcat 使配置生效:
./bin/shutdown.sh && ./bin/startup.sh
3. 在 Maven settings.xml
中配置凭据(可选)
为了避免在 pom.xml
中明文存储密码,可以在 ~/.m2/settings.xml
中配置:
<settings><servers><server><id>tomcat-admin</id> <!-- 与 pom.xml 中的 <server> 对应 --><username>admin</username><password>admin</password></server></servers>
</settings>
4. 使用 Maven 命令部署
(1) 部署 WAR 文件
mvn tomcat7:deploy
- 首次部署:将 WAR 文件上传到 Tomcat 的
webapps/
目录并自动启动应用。 - 访问应用:
http://localhost:8080/myapp
(2) 重新部署(更新代码后)
mvn tomcat7:redeploy
- 适用于代码修改后重新发布。
(3) 启动/停止应用
mvn tomcat7:start # 启动应用
mvn tomcat7:stop # 停止应用
mvn tomcat7:undeploy # 彻底删除应用
5. 常见问题及解决
问题 1:403 Access Denied
- 原因:Tomcat 管理用户未正确配置或权限不足。
- 解决:
- 检查
tomcat-users.xml
是否包含manager-script
角色。 - 确保
settings.xml
或pom.xml
中的用户名/密码正确。
- 检查
问题 2:Connection Refused
- 原因:Tomcat 未运行或 Manager App 未启用。
- 解决:
- 启动 Tomcat:
./bin/startup.sh
- 确保
manager
应用存在于webapps/
目录。
- 启动 Tomcat:
问题 3:NoSuchMethodError
(版本冲突)
- 原因:插件版本与 Tomcat 版本不兼容。
- 解决:
- Tomcat 7/8 使用
tomcat7-maven-plugin
。 - Tomcat 9/10 可尝试
tomcat10-maven-plugin
(社区维护版本)。
- Tomcat 7/8 使用
6. 高级配置
(1) 跳过测试
mvn tomcat7:deploy -DskipTests
(2) 指定环境(Profile)
在 pom.xml
中定义不同环境的配置:
<profiles><profile><id>prod</id><properties><tomcat.url>http://prod-server:8080/manager/text</tomcat.url></properties></profile>
</profiles>
运行命令时激活 Profile:
mvn tomcat7:deploy -Pprod
(3) 自定义 WAR 文件名
<build><finalName>myapp</finalName> <!-- 生成 target/myapp.war -->
</build>
总结
操作 | 命令 | 说明 |
---|---|---|
首次部署 | mvn tomcat7:deploy | 上传 WAR 并启动 |
重新部署 | mvn tomcat7:redeploy | 更新代码后重新发布 |
停止应用 | mvn tomcat7:stop | 停止应用(不删除) |
彻底删除 | mvn tomcat7:undeploy | 从 Tomcat 移除应用 |
调试连接问题 | mvn -X tomcat7:deploy | 显示详细日志 |
通过 Tomcat Maven 插件,可以实现 一键部署,特别适合持续集成(CI/CD)流程。