開發過程使用Tomcat Maven外掛程式持續快捷部署Web項目

來源:互聯網
上載者:User

標籤:style   http   io   os   使用   ar   java   strong   檔案   

    我在平時工作中部署Web項目到測試伺服器上的Tomcat時用的是Hudson。Hudson本身已經跟SVN、Git、Maven整合並且支援添加各種外掛程式。但如果使用Hudson,我需要配置兩個任務:一個任務負責打包項目成WAR,另外一個任務負責部署打包好的WAR包到目標伺服器的Tomcat上。雖然任務只需要配置一次,但每次修改代碼提交後,都得切換到瀏覽器點Hudson構建任務頁面上的Build Now按鈕,然後還得跳轉到另一個頁面觀察是否有報錯。煩不勝煩,偶然發現Tomcat Maven外掛程式支援直接部署項目到Tomcat中,嘗試一番後終於搞定,總結於此。

    網上關於這個主題的文章也不少,過程也大同小異,但本文最主要的是想記錄下我在此過程中踩過的坑和關於這種部署方案的建議。


1、準備工作

    下載安裝並配置好Tomcat和Maven。

    準備好一個Maven Web項目。


?2、Maven部署Web項目到Tomcat的配置?

?2.1、配置Tomcat角色?

    Maven自動部署實際上調的是Tomcat安裝目錄下的manager功能。而為了能正常訪問http://localhost:8080/manager頁面,我們需要修改$TOMCAT_HOME/conf目錄下的tomcat-users.xml:

<tomcat-users>  <role rolename="tomcat"/>  <role rolename="manager"/>  <role rolename="manager-gui"/>  <role rolename="manager-script" />  <role rolename="admin-gui"/>  <user username="tomcat" password="tomcat" roles="tomcat,manager,      manager-gui,manager-script,admin-gui" /></tomcat-users>

2.2、修改pom.xml增加Tomcat Maven外掛程式

   我使用的Tomcat7,pom.xml中增加如下配置:

    <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.version>3.2.2.RELEASE</spring.version><finalName>web-loab</finalName></properties><build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><configuration><url>http://localhost:8080/manager/text</url><server>tomcat</server><username>tomcat</username><password>tomcat</password><path>/${finalName}</path></configuration></plugin></plugins></build>

   上面username、password來自tomcat-users.xml。server是Tomcat伺服器名稱。path是訪問應用的路徑。url指定Tomcat管理頁路徑。

2.3、修改Maven的settings.xml

   在$USER_HOME/.m2目錄下找到settings.xml,添加server節點:

<servers>    <server>       <id>tomcat</id>       <username>tomcat</username>       <password>tomcat</password>    </server></servers>

    上面的username、password依然與tomcat-users.xml中相同,id與2.2中的server相同

2.4、部署項目到Tomcat

    先確保Tomcat伺服器已經啟動,然後cd到項目根目錄,運行下面的命令:

mvn clean tomcat7:redeploy

    部署成功,如下:

    然後我們就能在Tomcat安裝目錄的webapps目錄下找到新部署的WAR包。

    初次部署用的是tomcat7:deploy命令,重新部署可以用tomcat7:redeploy命令(推薦統一用這個),Tomcat Maven外掛程式支援的命令包括:run、shutdown、run-war-only、exec-war、standalone-war-only、deploy、standalone-war、undeploy、run-war、redeploy等。


?3、踩過的坑?

    光看上面的過程,似乎非常順暢,但世上的事總是不會那麼順利的。下面列舉幾個我踩過的坑。

?3.1、Windows系統下,redeploy過程無法刪除舊項目的目錄?

    報錯資訊在$TOMCAT_HOME/logs下的catalina記錄檔中,如下:

資訊: Undeploying context [/web-loab]十月 11, 2014 3:52:26 下午 org.apache.catalina.startup.ExpandWar deleteDir嚴重: [D:\tomcat\apache-tomcat-7.0.56\webapps\web-loab\WEB-INF] could not be completely deleted. The presence of the remaining files may cause problems

    大概是因為Tomcat還在使用這個目錄,無法刪除,必須修改$TOMCAT_HOME/conf/context.xml:

<Context antiJARLocking="true" antiResourceLocking="true">

?3.2、Servelt.class offending?

    這個問題應該不屬於本文主題範疇了,但可能因為這個導致Web項目啟動起來卻無法訪問,報錯資訊如下:

十月 11, 2014 3:46:29 下午 org.apache.catalina.loader.WebappClassLoader validateJarFile資訊: validateJarFile(D:\tomcat\apache-tomcat-7.0.56\webapps\web-loab\WEB-INF\lib\servlet-api-6.0.29.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servlet/Servlet.class

    原因是webapps目錄下的某個Web項目的WEB-INF/lib目錄下有servlet-api.jar,刪除之,並在pom.xml中指定servelt-api.jar的scope為provided:

<dependency><groupId>org.apache.tomcat</groupId><artifactId>servlet-api</artifactId><version>6.0.29</version><scope>provided</scope></dependency>

3.3、版本問題

    確保Web項目的Java Build Path使用的JDK版本、Java Compiler的編譯JDK版本以及Project Facets裡的Java版本一致。

    如果用的Tomcat6,則pom.xml中配置tomcat6-maven-plugin,如果用的tomcat7則用tomcat7-maven-plugin。或者預設用tomcat-maven-plugin。


4、有關使用Tomcat Maven外掛程式部署項目的一些建議

    這種方案能夠實現持續快捷部署。但它有一些局限性:

  • 要求從本地開發環境能直接存取Tomcat伺服器所在網段

  • 不能保留曆史部署套件

    因此初步建議只在開發環境使用這種部署方式,並且結合SVN、Git等版本控制軟體做兩個內部約定:

  • 所有可部署版本代碼都必須先簽入一個名為deploy-xx的分支,xx表示當前可部署版本,然後切到deploy-xx分支再部署項目

  • 以後增加了新功能,則需建立另一個deploy分支,並增大版本號碼。這樣可以利用版本控制軟體幫我們保留曆史可部署代碼(解決了上面提到的第二個局限性)。尤其是多重專案整合時,最好保證每一次整合時各個項目的deploy分支帶的版本尾碼相同。這樣可以方便各個項目代碼集體復原 

完!

開發過程使用Tomcat Maven外掛程式持續快捷部署Web項目

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.