Maven部署war至Tomcat

hkk666123發表於2020-12-28

Maven部署war至Tomcat

概述

為了減輕開發人員負擔及避免手動部署失誤,Tomcat提供了打包並部署war包至Tomcat的Maven外掛。

問題描述及使用場景

  • 場景: 部署新功能上線時,需要先打包生成war,再手動將其放置Tomcat的相關目錄下並啟動。
  • 問題: 手動操作就有可能會存在誤操,且需要耗費相關人力。那麼是否有相關Maven外掛可以實現自動打包並部署war至Tomcat的功能呢?
  • 解決: 通過學習Tomcat61及Tomcat72提供的Manager App HOW-TO發現Tomcat3開發了自動打包及部署war至Tomcat的Maven plugin, 並提供了相應的Maven命令4.

簡要實現

  • 基礎環境
    1. JDK8
    2. Maven 3
    3. Tomcat 6.0.37/Tomcat 7.0.53
  • Tomcat 6
## 釋出URL: (http://localhost:8080/manager/)
<protocol>://<domain name>:<port>/manager/
## 命令:
mvn tomcat6:deploy
  • Tomcat 7
## 釋出URL: (http://localhost:8080/manager/text)
<protocol>://<domain name>:<port>/manager/text
## 命令:
mvn tomcat7:deploy

Tomcat 7 示例

這個例子說明了如何在Tomcat7打包並部署WAR檔案。

Tomcat認證

%TOMCAT7_PATH%/conf/tomcat-users.xml檔案中, 新增具有角色管理器GUI和管理指令碼的使用者。

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <user username="admin" password="password" roles="manager-gui,manager-script" />
</tomcat-users>

Maven認證

%MAVEN_PATH%/conf/settings.xml檔案中, 新增上面的Tomcat 使用者,Maven使用該使用者來登入Tomcat伺服器。

<?xml version="1.0" encoding="UTF-8"?>
<settings ...>
  <servers>
    <server>
      <id>TomcatServer</id>
      <username>admin</username>
      <password>password</password>
    </server>
  </servers>
</settings>

Tomcat7 Maven 外掛

pom.xml檔案中, 宣告一個Maven的Tomcat外掛。

<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <url>http://localhost:8080/manager/text</url>
    <server>TomcatServer</server>
    <path>/yiibaiWebApp</path>
  </configuration>
</plugin>

怎麼執行的
Maven使用settings.xmlTomcatServer對應的使用者名稱及密碼進行Tomcat的認證, 驗證通過後Maven通過http://localhost:8080/manager/text將war檔案部署至同域名Tomcat伺服器path/yiibaiWebAppwebapps路徑下.

釋出到Tomcat

操作Tomcat WAR檔案的命令如下:

mvn tomcat7:deploy 
mvn tomcat7:undeploy 
mvn tomcat7:redeploy

示例

> mvn tomcat7:deploy

...
[INFO] Deploying war to http://localhost:8080/yiibaiWebApp
Uploading: http://localhost:8080/manager/text/deploy?path=%2FyiibaiWebApp&update=true
Uploaded: http://localhost:8080/manager/text/deploy?path=%2FyiibaiWebApp&update=true (13925 KB at 35250.9 KB/sec)

[INFO] tomcatManager status code:200, ReasonPhrase:OK
[INFO] OK - Deployed application at context path /yiibaiWebApp
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.507 s
[INFO] Finished at: 2015-08-05T11:35:25+08:00
[INFO] Final Memory: 28M/308M
[INFO] ------------------------------------------------------------------------

Tomcat 6 示例

這個例子說明了如何在Tomcat6打包和部署WAR檔案。這些步驟和Tomcat7是一樣的,只是部署URL和命令名稱不同。

Tomcat認證

%TOMCAT6_PATH%/conf/tomcat-users.xml檔案中, 新增具有角色管理器GUI和管理指令碼的使用者。

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <user username="admin" password="password" roles="manager-gui,manager-script" />
</tomcat-users>

Maven認證

%MAVEN_PATH%/conf/settings.xml檔案中, 新增上面的Tomcat 使用者,Maven使用該使用者來登入Tomcat伺服器。

<?xml version="1.0" encoding="UTF-8"?>
<settings ...>
  <servers>
    <server>
      <id>TomcatServer</id>
      <username>admin</username>
      <password>password</password>
    </server>
  </servers>
</settings>

Tomcat7 Maven 外掛

pom.xml檔案中, 宣告一個Maven的Tomcat外掛。

<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat6-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <url>http://localhost:8080/manager</url>
    <server>TomcatServer</server>
    <path>/yiibaiWebApp</path>
  </configuration>
</plugin>

怎麼執行的
Maven使用settings.xmlTomcatServer對應的使用者名稱及密碼進行Tomcat的認證, 驗證通過後Maven通過http://localhost:8080/manager將war檔案部署至同域名Tomcat伺服器path/yiibaiWebAppwebapps路徑下.

釋出到Tomcat

操作Tomcat WAR檔案的命令如下:

mvn tomcat6:deploy 
mvn tomcat6:undeploy 
mvn tomcat6:redeploy

示例

> mvn tomcat6:deploy

...
[INFO] Deploying war to http://localhost:8080/yiibaiWebApp
Uploading: http://localhost:8080/manager/deploy?path=%2FyiibaiWebApp
Uploaded: http://localhost:8080/manager/deploy?path=%2FyiibaiWebApp (13925 KB at 32995.5 KB/sec)

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 22.652 s
[INFO] Finished at: 2014-08-05T12:18:54+08:00
[INFO] Final Memory: 30M/308M
[INFO] ------------------------------------------------------------------------

疑問

該技術目前已經有些過時了, 已被當下以Kubernetes (K8s)為核心的DevOps雲技術所替代, 後者的自動部署/日誌分析/效能檢測等功能更加有優勢.


  1. Apache Tomcat 6 Manager App HOW-TO ↩︎

  2. Apache Tomcat 7 Manager App HOW-TO ↩︎

  3. Tomcat Maven Plugin ↩︎

  4. Tomcat Maven Plugin – Context Goals ↩︎

相關文章