1. 程式人生 > >maven tomcat plugin實現熱部署

maven tomcat plugin實現熱部署

前言:

此處的方法適用於tomcat6 和 tomcat7,對於最新的tomcat8還沒有進行過測試,有興趣的同學可以自己測一下.

總共分為五步:

1.在tomcat中配置使用者許可權,即新增管理員帳號

2.在maven中新增server,配置tomcat的管理員帳號密碼

3.在project中新增外掛,以及maven中配置的server,

4.設定部署命令

5.進行部署

附相關錯誤及解決辦法

下面進行分步驟講解:

一.在tomcat中配置使用者許可權,即新增管理員帳號.

我們需要實現熱部署,自然就需要通過maven操作tomcat,所以就需要maven取得操作tomcat的許可權,現在這一步就是配置tomcat的可操作許可權.

在tomcat的安裝目錄下,修改conf / tomcat-user.xml檔案,在<tomcat-users> 節點下面增加如下配置:

<role rolename="manager-gui" />
<role rolename="manager-script" />
<user username="tomcat" password="tomcat" roles="manager-gui, manager-script" />
二.在maven中新增server,配置tomcat的管理員帳號密碼

現在tomcat開啟了許可權,maven既然要操作tomcat,那麼maven就要拿到tomcat的管理員帳號和密碼才能夠使用.

在maven的安裝目錄下,修改conf / setting.xml檔案.在<server> 節點下面增加如下配置:

<server>  
       <id>admin</id>  
       <username>tomcat</username>  
       <password>tomcat</password>  
</server>
三.在project中新增外掛,以及maven中配置的server,

現在maven已經擁有操作tomcat的許可權了,但是這兩者之間想要通訊的話還需要一個橋樑,那就是在maven中配置tomcat外掛.

修改專案的pom.xml檔案,在<build> 節點下面增加如下配置:

<plugins>
<!-- 第一種方式: apache官方tomcat外掛,支援deploy -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0-SNAPSHOT</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<server>admin</server>
</configuration>
</plugin>
<!-- 第二種方式: 第三方tomcat外掛,支援redeploy -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<server>admin</server>
<ignorePackaging>true</ignorePackaging>
</configuration>
</plugin>
</plugins>

對於以上外掛,網上有兩種,經過測試都是可以用的,但是注意,以上的配置只能用於tomcat7,如果要用tomcat6的話,需要配置成如下方式:

<plugins>
<!-- apache官方tomcat外掛,支援deploy -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat6-maven-plugin</artifactId>
<version>2.0-SNAPSHOT</version>
<configuration>
<url>http://localhost:8080/manager/html</url>
<server>admin</server>
</configuration>
</plugin>
<!-- 第三方tomcat外掛,支援redeploy -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<url>http://localhost:8080/manager</url>
<server>admin</server>
<ignorePackaging>true</ignorePackaging>
</configuration>
</plugin>
</plugins>

不論是tomcat7還是tomcat6,只要用到其中一種外掛就行了.但是這兩種外掛還是有區別的:

第一種是apache官方的外掛,支援deploy命令,如果已經部署到tomcat容器,第二次部署的時候就會報錯,提示該專案已經部署.

第二種是第三方的外掛,可以使用redeploy命令,可以重複部署
同時,請在<project>節點下增加倉庫配置,不然可能外掛找不到,導致報錯:

<repositories>
<repository>
<id>people.apache.snapshots</id>
<url>
http://repository.apache.org/content/groups/snapshots-group/
</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>

<pluginRepositories>
<pluginRepository>
<id>apache.snapshots</id>
<name>Apache Snapshots</name>
<url>http://repository.apache.org/content/groups/snapshots-group/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>

四.設定部署命令

一般使用搜是在eclipse中,可以右鍵點選需要部署的專案,Run as -> Run configurations -> maven build -> 右鍵 new,這樣配置一個新的maven命令

具體配置命令方法:

1.在base directory中選擇自己的專案

2.Goals的配置

如果使用apache的官方外掛,那麼就用 " tomcat7:deploy" 命令

如果使用第三方外掛,那麼就用 " tomcat:redeploy"命令


五.進行部署

右鍵自己的專案,Run as -> Maven build即可.

注:

有些同學不習慣使用IDE,那麼在命令列中使用maven實現部署也是一樣的.

通過命令列進入到自己的專案資料夾下,使用mvn命令,例如: mvn tomcat7:deploy

附相關錯誤及解決辦法:

1.Connection refused錯誤
報錯資訊如下:
[ERROR]Failed to execute goal org.apache.tomcat.maven: tomcat7-maven-plugin: 2.0- SNAPSHOT: deploy (default-cli) on project helloworld: Cannot invoke Tomcat manager: Connection refused: connect -> [Help 1]
原因:未啟動Tomcat伺服器
解決辦法:先啟動Tomcat伺服器再選擇Run
2. 401錯誤
報錯資訊如下:
[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin: 2.0-SNAPSHOT:deploy (default-cli) on project helloworld: Cannot invoke Tomcat manager: Server returned HTTP response code: 401 for URL: http://localhost:8080/manager/text/deploy?path=%2Fhelloworld -> [Help 1]
原因:許可權問題
解決辦法在$CATALINA_BASE/conf/tomcat-users.xml,
如D:\apache-tomcat-7.0.34\conf\tomcat-users.xml檔案中新增許可權
<role rolename=”manager”/>
<user username=”admin” password=”admin” roles=”manager”/>
修改pom.xml檔案,在<configuration>  </configuration>中新增
<username>admin</username>  <password>admin</password>
3.403錯誤
報錯資訊如下:
[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin: 2.0-SNAPSHOT:deploy (default-cli) on project helloworld: Cannot invoke Tomcat manager: Server returned HTTP response code: 403 for URL: http://localhost:8080/manager/html/deploy?path=%2Fhelloworld -> [Help 1]
原因:產生該問題有可能因為兩個原因,具體參見解決辦法
解決辦法:
1)如果使用的是Tomcat 7,需要修改pom.xml中部署的url地址,將<url>http://localhost:8080/manager</url>改<url>http://localhost:8080/manager/text</url>
2)給tomcat使用者許可權分配上,需要同時具備manager-gui和manager-script許可權,我在遇到該問題時,就是忘了分配manager-script許可權。
正確的conf/tomcat-users.xml配置應為:
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin” password="admin" roles="manager-gui, manager-script"/>
</tomcat-users>