在 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)流程。