使用Maven自動部署Java Web項目到Tomcat問題小記


導讀

首先說說自己為啥要用maven管理項目,一個直接的原因是:我在自己電腦上開發web項目,每次部署到服務器上時都要經歷如下步驟:

  1. 首先在Eclipse里將項目打包成war包
  2. 將服務器上原來的項目文件夾刪掉
    cd /var/lib/tomcat7/webapps sudo rm XXX.war sudo rm -rf XXX
  3. 將war包傳到服務器上,比如用pscp命令上傳
    pscp -pw "xxx" XXX.war username@ip:/var/lib/tomcat7/webapps
  4. 重啟tomcat
    sudo service tomcat7 restart

每次都這些步驟,非常煩人,而用maven來管理就不需要這些步驟啦,直接在Eclipse里配置maven插件,然后使用maven來自動部署項目,關於怎么自動部署可網上很多教程,具體可參看后面的參考資料,部署成功后只需要用一個命令即可自動將我的web項目部署到tomcat服務器上,我一般用下面這樣的命令:

mvn tomcat7:deploy -Dmaven.test.skip=true

其中-Dmaven.test.skip=true表示臨時性跳過測試代碼的編譯(也可用-DskipTests表示跳過測試階段),maven.test.skip同時控制maven-compiler-plugin和maven-surefire-plugin兩個插件的行為,即跳過編譯,又跳過測試。

但初次按着教程來總是遇到各種問題, 下面記錄我在部署過程中遇到的各種問題及注意事項,以提供參考意義。

maven使用問題小記

  1. maven配置文件pom.xml里的tomcat插件一般像下面這樣配置:

    <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> <version>1.1</version> <configuration> <path>/test</path> <url>http://localhost:8080/manager/</url> <server>tomcat</server> </configuration> </plugin>

    里面的server需要在maven的配置文件settings.xml里配置如下:

    <server> <id>tomcat</id> <username>admin</username> <password>123456</password> </server>

    這里的username和password一般為tomcat server的用戶名和密碼。

  2. 開始運行自動部署命令時,一定要先啟動tomcat。否則會報下列錯誤:

    [INFO]   
    [INFO] --- tomcat-maven-plugin:1.0:redeploy (default-cli) @ SSHMJ-FRANK --- [INFO] Deploying war to http://localhost:8080/SSHMJ-FRANK [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 9.630s [INFO] Finished at: Tue Aug 31 16:35:52 CST 2010 [INFO] Final Memory: 6M/15M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.codehaus.mojo:tomcat-maven-plugin:1.0:redeploy (default-cli) on project SSHMJ-FRANK: Cannot invoke Tomcat manager: Connection refused: connect -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
  3. HTTP 403錯誤

    [ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat-maven-plugin: 1.1: deploy (default-cli) on project XXX: Cannot invoke Tomcat manager: Server returned HTTP response code: 403 for URL: http://localhost:8080/manager/html/deploy?path=XXX -> [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>

    不過我的問題都不是上面兩個,我的問題是自動部署命令寫錯了,應該是mvn tomcat7:deploy命令,而我之前用的是mvn tomcat:deploy命令

  4. “Application already exists at path”問題 使用tomcat7-maven-plugin插件部署到tomcat服務器時,當服務器上已經有相同名字的項目就會導致

    FAIL - Application already exists at path ...

    解決方法是在pom.xml文件中配置tomcat7-maven-plugin插件時加入參數update

    <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.0-SNAPSHOT</version> <configuration> <url>http://XXX:8080/manager/html</url> <server>tomcat</server> <username>admin</username> <password>12345</password> <path>/${finalName}</path> <update>true</update> </configuration> </plugin>
  5. “web.xml which will be ignored ”問題 在使用Maven 編譯項目的時候會出現:

    [WARNING] Warning: selected war files include a WEB-INF/web.xml which will be ignored (webxml attribute is missing from war task, or ignoreWebxml attribute is specified as 'true')

    解決方法是添加下面這樣一個plugin即可:

    <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <packagingExcludes>WEB-INF/web.xml</packagingExcludes> </configuration> </plugin>

參考資料

去tomcat官網http://tomcat.apache.org/,左側欄Apache Tomcat下的Maven Plugin,點進去選擇最新版本Version 2.2

通過介紹可知,使用tomcat的maven插件有兩種配置方式:

第一種:在pom.xml文件的<build></build>中加入如下配置:

 

  1. <pluginManagement>  
  2.     <plugins>  
  3.         <plugin>  
  4.             <groupId>org.apache.tomcat.maven</groupId>  
  5.             <artifactId>tomcat6-maven-plugin</artifactId>  
  6.             <version>2.2</version>  
  7.         </plugin>  
  8.         <plugin>  
  9.             <groupId>org.apache.tomcat.maven</groupId>  
  10.             <artifactId>tomcat7-maven-plugin</artifactId>  
  11.             <version>2.2</version>  
  12.         </plugin>  
  13.     </plugins>  
  14. </pluginManagement>  

這種配置是針對某一個項目的,只對一個項目生效。

 

第二種:在maven的setting.xml文件中加入如下配置:

 

  1. <pluginGroups>  
  2.     <pluginGroup>org.apache.tomcat.maven</pluginGroup>  
  3. </pluginGroups>  

這種在maven插件上的配置會對所有的項目起作用。

 

配置好之后,就可以啟動項目看效果了。

使用Maven Build啟動項目,Goals那一欄填:

tomcat6:run -Dmaven.tomcat.uriEncoding=UTF-8 -Dmaven.tomcat.path=/ -Dmaven.tomcat.port=8080

或者填:

tomcat7:run -Dmaven.tomcat.uriEncoding=UTF-8 -Dmaven.tomcat.path=/ -Dmaven.tomcat.port=8080

其中,

-Dmaven.tomcat.uriEncoding=UTF-8 這個配置最好始終加上

-Dmaven.tomcat.path=/ 這個配置可以不加,默認使用/${artifactId},此處的artifactId即建pom.xml文件時寫的那個artifactId,一般為項目名。如果配置為/的話,屆時訪問的路徑就是hostname:port/,如果配置為/test的話,則訪問路徑是hostname:port/test,相當於namesapce的作用。

-Dmaven.tomcat.port=8080 這個配置可以設置,默認是8080

以上兩種啟動方式的區別僅在於使用的tomcat的版本不一樣。如果使用tomcat7的話,則如果配置方式是在pom.xml文件中配置的話,則必須配置tomcat7-maven-plugin,否則會BUILD FAILURE;如果配置方式是配置maven的setting.xml文件的話,則無所謂,<pluginGroup>org.apache.tomcat.maven</pluginGroup>這一行的作用是把所有版本的maven的tomcat插件及相關插件都下載下來了。使用tomcat6的話也同理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM