自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

開發(fā)過程使用Tomcat Maven插件持續(xù)快捷部署Web項(xiàng)目

開發(fā) 前端
Hudson本身已經(jīng)跟SVN、Git、Maven集成并且支持添加各種插件。但如果使用Hudson,我需要配置兩個(gè)任務(wù):一個(gè)任務(wù)負(fù)責(zé)打包項(xiàng)目成WAR,另外一個(gè)任務(wù)負(fù)責(zé)部署打包好的WAR包到目標(biāo)服務(wù)器的Tomcat上。

我在平時(shí)工作中部署Web項(xiàng)目到測試服務(wù)器上的Tomcat時(shí)用的是Hudson。Hudson本身已經(jīng)跟SVN、Git、Maven集成并且支持添加各種插件。但如果使用Hudson,我需要配置兩個(gè)任務(wù):一個(gè)任務(wù)負(fù)責(zé)打包項(xiàng)目成WAR,另外一個(gè)任務(wù)負(fù)責(zé)部署打包好的WAR包到目標(biāo)服務(wù)器的Tomcat上。雖然任務(wù)只需要配置一次,但每次修改代碼提交后,都得切換到瀏覽器點(diǎn)Hudson構(gòu)建任務(wù)頁面上的Build Now按鈕,然后還得跳轉(zhuǎn)到另一個(gè)頁面觀察是否有報(bào)錯(cuò),然后再點(diǎn)擊執(zhí)行相應(yīng)的部署任務(wù)。煩不勝煩,偶然發(fā)現(xiàn)Tomcat Maven插件支持直接打包并部署項(xiàng)目到Tomcat中,嘗試一番后終于搞定,總結(jié)于此。

網(wǎng)上關(guān)于這個(gè)主題的文章也不少,過程也大同小異,但本文除了過程外還想記錄下我期間踩過的坑和關(guān)于這種部署方案的建議。

1、準(zhǔn)備工作

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

準(zhǔn)備好一個(gè)Maven Web項(xiàng)目。

‍2、Maven部署Web項(xiàng)目到Tomcat的配置‍

‍2.1、配置Tomcat角色‍

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

  1. <tomcat-users> 
  2.   <role rolename="tomcat"/> 
  3.   <role rolename="manager"/> 
  4.   <role rolename="manager-gui"/> 
  5.   <role rolename="manager-script" /> 
  6.   <role rolename="admin-gui"/> 
  7.   <user username="tomcat" password="tomcat" roles="tomcat,manager,  
  8.       manager-gui,manager-script,admin-gui" /> 
  9. </tomcat-users> 

2.2、修改pom.xml增加Tomcat Maven插件

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

  1. <properties> 
  2.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
  3.     <spring.version>3.2.2.RELEASE</spring.version> 
  4.     <finalName>web-loab</finalName> 
  5. </properties> 
  6. <build> 
  7.     <plugins> 
  8.         <plugin> 
  9.             <groupId>org.apache.tomcat.maven</groupId> 
  10.             <artifactId>tomcat7-maven-plugin</artifactId> 
  11.             <configuration> 
  12.                 <url>http://localhost:8080/manager/text</url> 
  13.                 <server>tomcat</server> 
  14.                 <username>tomcat</username> 
  15.                 <password>tomcat</password> 
  16.                 <path>/${finalName}</path> 
  17.             </configuration> 
  18.         </plugin> 
  19.     </plugins> 
  20. </build> 

上面username、password來自tomcat-users.xml。server是Tomcat服務(wù)器名稱。path是訪問應(yīng)用的路徑。url指定Tomcat管理頁路徑。

2.3、修改Maven的settings.xml

在$USER_HOME/.m2目錄下找到settings.xml,添加server節(jié)點(diǎn):

  1. <servers> 
  2.     <server> 
  3.        <id>tomcat</id> 
  4.        <username>tomcat</username> 
  5.        <password>tomcat</password> 
  6.     </server> 
  7. </servers> 

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

2.4、部署項(xiàng)目到Tomcat

先確保Tomcat服務(wù)器已經(jīng)啟動(dòng),然后cd到項(xiàng)目根目錄,運(yùn)行下面的命令:

  1. mvn clean tomcat7:redeploy 

部署成功,如下:

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

初次部署用的是tomcat7:deploy命令,重新部署可以用tomcat7:redeploy命令(推薦統(tǒng)一用這個(gè)),Tomcat Maven插件支持的命令包括:run、shutdown、run-war-only、exec-war、standalone-war-only、deploy、standalone-war、undeploy、run-war、redeploy等。

3、踩過的坑

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

3.1、Windows系統(tǒng)下,redeploy過程無法刪除舊項(xiàng)目的目錄

報(bào)錯(cuò)信息在$TOMCAT_HOME/logs下的catalina日志文件中,如下:

  1. 信息: Undeploying context [/web-loab]  
  2. 十月 11, 2014 3:52:26 下午 org.apache.catalina.startup.ExpandWar deleteDir  
  3. 嚴(yán)重: [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 

 

大概是因?yàn)門omcat還在使用這個(gè)目錄,無法刪除,必須修改$TOMCAT_HOME/conf/context.xml:

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

3.2、Servelt.class offending

這個(gè)問題應(yīng)該不屬于本文主題范疇了,但可能因?yàn)檫@個(gè)導(dǎo)致Web項(xiàng)目啟動(dòng)起來卻無法訪問,報(bào)錯(cuò)信息如下:

  1. 十月 11, 2014 3:46:29 下午 org.apache.catalina.loader.WebappClassLoader validateJarFile  
  2. 信息: 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目錄下的某個(gè)Web項(xiàng)目的WEB-INF/lib目錄下有servlet-api.jar,刪除之,并在pom.xml中指定servelt-api.jar的scope為provided:

  1. <dependency> 
  2.     <groupId>org.apache.tomcat</groupId> 
  3.     <artifactId>servlet-api</artifactId> 
  4.     <version>6.0.29</version> 
  5.     <scope>provided</scope> 
  6. </dependency> 

3.3、版本問題

確保Web項(xiàng)目的Java Build Path使用的JDK版本、Java Compiler的編譯JDK版本以及Project Facets里的Java版本一致。

如果用的Tomcat6,則pom.xml中配置tomcat6-maven-plugin,如果用的tomcat7則用tomcat7-maven-plugin?;蛘吣J(rèn)用tomcat-maven-plugin。

4、有關(guān)使用Tomcat Maven插件部署項(xiàng)目的一些建議

這種方案能夠?qū)崿F(xiàn)持續(xù)快捷部署。但它有一些局限性:

  • 要求從本地開發(fā)環(huán)境能直接訪問Tomcat服務(wù)器所在網(wǎng)段

  • 不能保留歷史部署包

因此初步建議只在開發(fā)環(huán)境使用這種部署方式,并且結(jié)合SVN、Git等版本控制軟件做兩個(gè)內(nèi)部約定:

  • 所有可部署版本代碼都必須先簽入一個(gè)名為deploy-xx的分支,xx表示當(dāng)前可部署版本,deploy分支代碼必須保證是可以部署的代碼,然后切到deploy-xx分支再部署項(xiàng)目

  • 以后增加了新功能,則需新建另一個(gè)deploy分支,并增大版本號。這樣可以利用版本控制軟件幫我們保留各個(gè)歷史可部署代碼(解決了上面提到的第二個(gè)局限性)。尤其是多個(gè)項(xiàng)目集成時(shí),***保證每一次集成時(shí)各個(gè)項(xiàng)目的deploy分支帶的版本后綴相同。這樣可以方便各個(gè)項(xiàng)目代碼集體回滾 

本文出自:http://my.oschina.net/feichexia/blog/326893

責(zé)任編輯:林師授 來源: 優(yōu)雅先生的博客
相關(guān)推薦

2011-12-31 09:49:30

MavenJava

2011-10-17 09:31:39

maven

2021-11-02 15:07:22

Web前端開發(fā)

2010-02-22 17:20:45

Python開發(fā)

2023-12-10 21:03:01

TomcatMavenJava

2022-05-19 14:59:32

Tomcat服務(wù)器開放

2015-09-10 09:55:36

移動(dòng)web開發(fā)問題

2010-07-05 12:09:10

RationalJazz需求管理

2009-06-17 14:33:08

java項(xiàng)目開發(fā)

2010-07-21 14:42:15

Windows Pho

2013-07-18 13:44:13

2017-09-08 17:25:18

Vue探索實(shí)踐

2020-10-12 10:41:15

Linux 代碼 開發(fā)

2011-06-15 15:29:25

Qt C++

2020-08-03 07:59:12

機(jī)器學(xué)習(xí)開發(fā)數(shù)據(jù)

2010-03-04 09:54:24

Android開發(fā)

2012-07-05 09:33:49

Nexus 7

2010-05-27 12:30:52

MySQL工具

2012-02-28 14:48:41

2014-05-20 10:09:54

Intellij IDMaven Web
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號