我平时工作中在测试服务器上部署web项目到Tomcat时使用的是Hudson。Hudson本身已经集成了SVN、Git、Maven并支持添加各种插件。但是如果我使用Hudson,我需要配置两个任务:一个任务负责将项目打包成WAR,另一个任务负责将打包好的WAR包部署到目标服务器的Tomcat中。虽然任务只需要配置一次,但是每次修改提交代码,都得切换到浏览器点击Hudson构建任务页面的BuildNow按钮,然后跳转到另一个页面查看是否有错误报告,然后单击执行相应的部署任务。烦死了,无意间发现TomcatMaven插件支持直接打包部署项目到Tomcat。网上有很多关于这个话题的文章,过程也差不多,但是除了过程,这篇文章还想记录一下我期间踩过的坑,以及对这个部署方案的建议。1.准备工作下载、安装和配置Tomcat和Maven。准备好MavenWeb项目。?2。Maven部署Web项目到Tomcat配置??2.1。配置Tomcat角色?Maven自动部署其实就是调整Tomcat安装目录下的manager功能。为了能够正常访问http://localhost:8080/manager页面,我们需要修改$TOMCAT_HOME/conf目录下的tomcat-users.xml:2.2、修改pom.xml添加TomcatMaven插件我用的是Tomcat7,在pom.xml中添加如下配置:<属性><项目。build.sourceEncoding>UTF-83.2.2.RELEASEweb-loab<插件>org.apache.tomcat.maventomcat7-maven-pluginhttp://localhost:8080/manager/文本tomcattomcattomcat/${finalName}上面的用户名和密码来自tomcat-users.xmlserver是Tomcat服务器的名字。path是访问应用程序的路径。url指定Tomcat管理页面路径。2.3.修改Maven的settings.xml在$USER_HOME/.m2目录下找到settings.xml,添加server节点:tomcattomcattomcat上面的用户名和密码还是和tomcat-users.xml中的一样,id和2.2中的server一样。2.4将项目部署到Tomcat,首先确保Tomcat服务器已经启动,然后cd到项目根目录下,运行如下命令:mvncleantomcat7:redeploy部署成功,如下:然后我们可以找到新部署的WAR包在Tomcat安装目录下的webapps目录下。初始部署使用tomcat7:deploy命令,重新部署可以使用tomcat7:redeploy命令(推荐统一使用)。TomcatMaven插件支持的命令包括:??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日志文件中,如下:Information:Undeployingcontext[/web-loab]October11,20143:52:26pmorg.apache.catalina.startup.ExpandWardeleteDirSerious:[D:\tomcat\apache-tomcat-7.0.56\webapps\web-loab\WEB-INF]无法完全删除。剩余文件的存在可能会导致问题,可能是因为Tomcat仍在使用该目录,无法删除。$TOMCAT_HOME/conf/context.xml必须修改:3.2。Servelt.class违规的问题应该不属于本文讨论范围,但可能是因为这个导致Web项目无法启动。访问,报错信息如下:October11,20143:46:29pmorg.apache.catalina.loader.WebappClassLoadervalidateJarFileinformation:validateJarFile(D:\tomcat\apache-tomcat-7.0.56\webapps\web-loab\WEB-INF\lib\servlet-api-6.0.29.jar)-jarnotloaded.SeeServletSpec3.0,section10.7.2.Offendingclass:javax/servlet/Servlet.class原因是Web项目中的WEB-INF/libwebapps目录目录下有servlet-api.jar,删除,在pom.xml中指定servlet-api.jar的范围,如提供:org.apache.tomcat<artifactId>servlet-api6.0.29provided3.3,版本问题确保Web项目的JavaBuildPath使用JDKversion,JavaCompiler编译后的JDK版本与ProjectFacets中的Java版本一致。如果使用Tomcat6,则在pom.xml中配置tomcat6-maven-plugin,如果使用tomcat7,则使用tomcat7-maven-plugin。或者默认使用tomcat-maven-plugin。4、使用TomcatMaven插件部署项目的一些建议该方案可以实现持续快速部署。但它有一些局限性:需要从本地开发环境直接访问Tomcat服务器所在网段,不能保留历史部署包。因此,最初建议只在开发环境使用这种部署方式,结合SVN、Git等版本控制软件做两个内部约定:所有可部署的版本代码必须先签入名为deploy-xx的分支,xx表示当前可部署的版本,deploy分支的代码必须保证是可部署的代码,然后切换到deploy-xx分支再部署项目如果以后要增加新的功能,需要再创建一个deploy分支和版本数量增加。这允许我们使用版本控制软件来帮助我们保留每个历史可部署代码(解决上面提到的第二个限制)。尤其是在集成多个项目的时候,每次集成最好保证每个项目的deploy分支的版本后缀是一样的。这样可以方便各个项目代码的集体回滚本文来自:http://my.oschina.net/feichexia/blog/326893