`

开发过程使用Tomcat Maven插件持续快捷部署Web项目

 
阅读更多

我在平时工作中部署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分支代码必须保证是可以部署的代码,然后切到deploy-xx分支再部署项目

  • 以 后增加了新功能,则需新建另一个deploy分支,并增大版本号。这样可以利用版本控制软件帮我们保留各个历史可部署代码(解决了上面提到的第二个局限 性)。尤其是多个项目集成时,最好保证每一次集成时各个项目的deploy分支带的版本后缀相同。这样可以方便各个项目代码集体回滚 

 

完!转载请注明出处:http://my.oschina.net/feichexia/blog/326893

分享到:
评论

相关推荐

    maven项目转动态web项目,部署到tomcat

    "Maven 项目转动态 Web 项目并部署到 Tomcat" Maven 项目转动态 Web 项目并部署到 Tomcat 是一个常见的操作,特别是在 Eclipse 和 Tomcat 环境下。本文将详细介绍如何将 Maven 项目转换为动态 Web 项目,并将其部署...

    在Eclipse中Tomcat和Maven插件相互配合进行热部署

    在Eclipse中,Tomcat和Maven插件的相互配合是开发Java Web应用程序时不可或缺的工具。这个过程涉及到了源码管理和自动化构建工具Maven,以及集成开发环境Eclipse中的服务器适配器Tomcat,它们共同助力实现项目的热...

    Maven使用tomcat8-maven-plugin插件.docx

    使用 tomcat8-maven-plugin 插件可以简化项目的部署过程,无需手动配置 Tomcat 服务器。该插件可以自动将项目部署到 Tomcat 服务器上,并且可以自动配置 Tomcat 服务器的 settings。 结论 tomcat8-maven-plugin ...

    maven通过tomcat插件,如何运行Java Web项目 支持断点

    本文将详细介绍如何使用Maven的Tomcat插件来运行Java Web项目,并支持断点调试。 首先,我们需要在Maven的`pom.xml`文件中添加Tomcat插件的配置。这个插件通常选择`maven tomcat7-maven-plugin`或`maven tomcat9-...

    jenkins+maven-tomcat插件自动部署

    一旦所有配置都完成,Jenkins将能够自动从Git仓库获取代码,使用Maven进行构建,然后通过Tomcat Maven插件将应用部署到远程Tomcat服务器上。这个自动化流程显著提高了开发效率,减少了手动部署的错误和时间消耗。 ...

    Maven和Tomcat插件

    总结来说,Maven和Tomcat插件的结合使用,能够帮助开发者高效地构建、管理、部署Java Web项目。通过合理配置POM文件,我们可以实现自动化构建流程,提高开发效率,同时保持项目的一致性和可维护性。

    Eclipse中创建Web Maven Project并部署到Tomcat中

    使用Maven的一大优势在于它可以自动化处理依赖管理和构建过程,使得开发和部署更加便捷。通过Eclipse与Maven的结合,开发者能够高效地管理J2EE项目,快速部署到Tomcat服务器,提高开发效率。同时,Maven的插件系统也...

    jenkins实现maven项目自动部署到tomcat

    该文档旨在教你如何利用Jenkins自动化处理Maven项目的编译、打包和部署到Tomcat服务器的过程,使得开发工作更加高效。以下是详细的步骤和关键知识点: **1. Maven项目背景** Maven是Java开发中广泛使用的构建工具,...

    maven 远程部署tomcat

    Maven 远程部署 Tomcat 容器是指使用 Maven 插件将 Java Web 项目自动部署到 Tomcat 容器中,这样可以免去手工拷贝的重复工作。这种方法可以大大提高开发效率和项目部署速度。 Maven 部署 Tomcat 容器的配置 要...

    使用Maven Cargo 插件管理Tomcat6的部署

    在IT行业中,管理和部署Web应用程序是一项关键任务,而Maven Cargo插件则为开发者提供了一个强大的工具,使得在Tomcat6上部署应用变得更加便捷。Cargo是一个用于自动化服务器和容器管理的Java库,它允许开发者在多种...

    Maven Web项目部署到tomcat的方法总结

    将Maven项目部署到Tomcat服务器是开发和测试Web应用程序的必备步骤。下面将介绍在Eclipse上Maven结构Web项目如何部署到Tomcat的几种常用的方法。 以.war包的形式部署到Tomcat 要将Maven项目部署到Tomcat服务器,...

    tomcat在ecplise下的插件,方便使用

    标题中的“tomcat在ecplise下的插件,方便使用”指的是在Eclipse集成开发环境中安装和使用Tomcat服务器的扩展工具。这个插件能够帮助开发者更高效地管理和调试基于Tomcat的应用程序,无需离开Eclipse环境即可进行...

    maven-tomcat自动部署

    总结来说,Maven-Tomcat自动部署是一种高效的Java Web应用部署方法,通过Maven的插件功能,我们可以将项目构建和应用服务器的管理整合在一起,简化了开发和运维的工作流程。在实际项目中,根据具体需求选择合适的...

    Maven Tomcat插件源码

    Maven Tomcat插件是Apache Maven项目中的一个重要组件,它允许开发人员通过Maven构建工具直接部署和运行Java Web应用程序到Apache Tomcat服务器上。这个插件极大地简化了开发流程,使得开发者无需手动将应用部署到...

    eclipse开发java程序必备插件(maven+tomcat+svn插件)

    总结来说,Maven插件负责项目构建和依赖管理,Tomcat插件提供便捷的Web应用部署与调试环境,而SVN插件则实现代码版本控制和团队协作。这些插件的集成使用,能极大地提高Java开发者的生产力,简化开发流程,确保项目...

    Maven Tomcat 插件

    Maven Tomcat插件为Java Web开发者提供了一个强大且灵活的工具,使得他们能够在本地或远程Tomcat服务器上轻松部署Web应用程序。通过简单的配置,就可以自动化完成整个部署过程,从而大大节省时间和精力,提高开发...

    tomcat-maven-plugin:Apache Tomcat Maven插件的镜像

    总的来说,Apache Tomcat Maven插件极大地简化了Java EE应用与Tomcat服务器之间的交互,提高了开发效率,是现代Java Web开发不可或缺的工具之一。通过深入理解和使用这个插件,开发者可以更好地管理他们的应用生命...

    maven构建web项目

    本篇文章将深入探讨如何使用Maven构建Web项目,并详细解释如何将构建好的项目部署到Tomcat服务器。 首先,Maven是Apache软件基金会的一个开源项目,它通过一个统一的方式来管理项目的构建、报告和文档。Maven的核心...

    maven集成tomcat支持热部署

    在Java开发过程中,Maven作为一个强大的构建工具,能够有效地管理和构建项目,而Tomcat作为流行的Servlet容器,常常被用于运行和测试Web应用。本篇将详细介绍如何通过Maven集成Tomcat,实现项目的热部署,从而提高...

Global site tag (gtag.js) - Google Analytics