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

通过    把一个Web项目发布到本地或者远程Tomcat环境 来分析,
<properties>
          <org.springframework.version>3.0.3.RELEASE</org.springframework.version>
          <org.slf4j.version>1.5.10</org.slf4j.version>
          <!-- 跟Cargo发布项目相关-->
          <myproject.name>cargosample</myproject.name>
          <cargo.project.groupid>${project.groupId}</cargo.project.groupid>
          <cargo.project.artifactid>cargosample-webapp</cargo.project.artifactid>
          <!--可单独提取并配置到profiles文件来激活 -->
          <catalina.home>${env.CATLINA_HOME}</catalina.home><!--D:\hudson_ci\hudson_dep_tools\Tomcat6.0-->
          <cargo.tomcat.manager.hostname>127.0.0.1</cargo.tomcat.manager.hostname>
          <cargo.tomcat.manager.port>8080</cargo.tomcat.manager.port>
          <cargo.tomcat.manager.ajp.port>8009</cargo.tomcat.manager.ajp.port>
          <cargo.tomcat.manager.username>admin</cargo.tomcat.manager.username>
          <cargo.tomcat.manager.password>1234</cargo.tomcat.manager.password>
</properties>


      值得一提注意的是,本次示例我使用的是同一个Tomcat来让Cargo模拟本地和远程两种方式来发布war。
     因为我们需要部署sample-webapp的快照,把它作为以Cargo方式部署必需的依赖。所以我们在3和4中间都首先要添加对它的依赖。

<dependencies>
       <dependency>
            <groupId>org.jdonee.cargosample</groupId>
            <artifactId>cargosample-webapp</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <type>war</type>
       </dependency>
  </dependencies>



一、部署项目到本地环境
在<build>节点下配置Cargo:
     1)首先配置的是<container>节点,详细描述如下:
<configuration>
     <wait>true</wait>
     <!--以下标记将详细描述你想要部署的容器-->
          <container>
               <!--
               指定"tomcat6x"这个名称非常的重要!因为它是Cargo中一个完整的标识符,如果你把"x"去掉的话,
               而只用"tomcat6"的话,它就不能在Tomcat 6.x下正常工作.
               -->
               <containerId>tomcat6x</containerId>
               <type>installed</type><!-- 本地已安装Tomcat时设置 -->
               <home>${catalina.home}</home><!--本地Tomcat安装目录 -->
          </container>
......



     2)接下来配置容器的属性,详细描述如下:
<!-- 容器的属性 -->
<configuration>
<!-- 如果你在容器属性中指定类型为"installed"的话,你就必须在如下配置type==existing和重配一次安装目录-->
     <type>existing</type>
     <home>${catalina.home}</home>
     <properties>
          <cargo.tomcat.manager.url>
          ${cargo.tomcat.manager.protocol}://${cargo.tomcat.manager.hostname}:${cargo.tomcat.manager.port}/manager
          </cargo.tomcat.manager.url>
          <cargo.remote.username>${cargo.tomcat.manager.username}</cargo.remote.username>
          <cargo.remote.password>${cargo.tomcat.manager.password}</cargo.remote.password>
          <cargo.tomcat.ajp.port>${cargo.tomcat.manager.ajp.port}</cargo.tomcat.ajp.port> <!-- ajp端口,默认8009 -->
     </properties>
</configuration>



     当然这里的属性还有很多,如果您想获知更多的参数定义,请点击 Tomcat+6x
     3)Cargo有部署的概念,详细操作如下:
 
......
<!-- 准备执行部署 -->
<deployer>
     <!-- 类型设置必须跟容器一致 -->
     <type>installed</type>
     <deployables>
          <!--在deployable中指定你要部署的webapp -->
          <deployable>
               <groupId>${cargo.project.groupid}</groupId>
               <artifactId>${cargo.project.artifactid}</artifactId>
               <type>war</type>
               <!--如果你想重新定义Web应用的名称时设置,大多数情况下你都会定义此属性-->
               <properties>
               <context>${myproject.name}</context>
               </properties>
          </deployable>
     </deployables>
</deployer>
</configuration>



 注:<deployalbe>中的<groupId>、<artifactId>和<type>必须定义。

     4)Cargo除了可以运行"mvn cargo:deploy"这样的插件目标外,也可执行如clean、install这样的标准阶段目标,大多数时候我们也希望如此,详细操作如下:

<!--运行构建的各个阶段时定义需执行的目标,每个阶段可执行多个目标 -->
<executions>
     <execution>
        <id>init-container</id><!--初始化容器时先关闭,避免JVM端口被绑定-->
        <phase>validate</phase>
        <goals><goal>stop</goal></goals>
    </execution>
    <!--如下的两个阶段主要用于集成测试,如果你只是部署到环境可以忽略它们 -->
    <execution>
          <id>start-container</id>
        <phase>pre-integration-test</phase>
        <goals><goal>deployer-deploy</goal><!--等同于deploy,本地不支持redeploy  --></goals>
    </execution>
    <execution>
          <id>stop-container</id>
        <phase>post-integration-test</phase>
        <goals><goal>deployer-undeploy</goal><!--等同于undeploy,本地不支持redeploy  --></goals>
    </execution>
    <execution><!-- 通过"install"目标部署到容器并运行-->
        <id>verify-deploy</id>
        <phase>install</phase>
        <goals><goal>deployer-deploy</goal><goal>start</goal>
        </goals>
    </execution>
    <execution><!--通过"pre-clean"目标取消部署并关闭容器-->
        <id>clean-undeploy</id>
        <phase>pre-clean</phase>
        <goals><goal>deployer-undeploy</goal><goal>stop</goal>
        </goals>
    </execution>
</executions>


本地配置完成,你在根pom项目下运行"mvn install"就可以把最新WAR快照部署到Tomcat中运行。

这里有两个值得注意的地方:

  (1)<wait>参数,  如果你设为"true"的话,它会告知你把Tomcat作为Maven构建过程的一部分,然后提示可通过快捷键Ctrl-C或者设置属性wait为false来关闭Session。但是这实际上只是把Tomcat脱离出Maven构建过程而没有真正关闭Tomcat进程。所以你必须再执行"pre-clean"或者"clean"目标来真正关闭它。

  (2)validate目标,我这里首先执行stop操作,如果不定义这个目标的话,重复执行"install"目标会出现JVM端口绑定错误。


二、部署项目到远程环境 
      同样,远程部署同样是在<build>节点下配置Cargo:
     
       1)首先配置的是<container>节点,详细描述如下:

<configuration>
     <wait>true</wait>
     <!--以下标记将详细描述你想要部署的容器-->
          <container>
               <!-- 
               指定"tomcat6x"这个名称非常的重要!因为它是Cargo中一个完整的标识符,如果你把"x"去掉的话,
               而只用"tomcat6"的话,它就不能在Tomcat 6.x下正常工作. 
               -->
               <containerId>tomcat6x</containerId>
               <type>remote</type> <!-- 远程部署类型必须是remote -->  
          </container>
......



       2)接下来配置容器的属性,详细描述如下:   
   
<configuration>
     <!-- 如果你在容器属性中指定类型为"remote"的话,那么你必须在如下配置type==runtime -->
     <type>runtime</type>
     <properties>
          <cargo.hostname>${cargo.tomcat.manager.hostname}</cargo.hostname> <!--主机名,默认localhost -->
          <cargo.servlet.port>${cargo.tomcat.manager.port}</cargo.servlet.port> <!-- 端口号,默认值 8080 -->
          <cargo.tomcat.manager.url>
               ${cargo.tomcat.manager.protocol}://${cargo.tomcat.manager.hostname}:${cargo.tomcat.manager.port}/manager
          </cargo.tomcat.manager.url>
          <cargo.remote.username>${cargo.tomcat.manager.username}</cargo.remote.username>
          <cargo.remote.password>${cargo.tomcat.manager.password}</cargo.remote.password>
          <cargo.tomcat.ajp.port>${cargo.tomcat.manager.ajp.port}</cargo.tomcat.ajp.port>
     </properties>
</configuration>


      3)Cargo远程部署,详细操作如下:

......
<deployer> 
     <!-- 类型设置必须跟容器一致 --> 
    <type>remote</type> 
     <deployables> 
     <!--在deployable中指定你要部署的webapp --> 
          <deployable> 
               <!--可选项,Ping目标地址判断项目地址发布成功或者失败 --> 
               <pingURL> 
                    ${cargo.tomcat.manager.protocol}://${cargo.tomcat.manager.hostname}:${cargo.tomcat.manager.port}/${myproject.name} 
               </pingURL> 
               <!--可选项,Ping目标地址的响应时间,默认20000毫秒 --> 
               <pingTimeout>300000</pingTimeout> 
               <groupId>${cargo.project.groupid}</groupId> 
               <artifactId>${cargo.project.artifactid}</artifactId> 
               <type>war</type> 
               <properties> 
                    <context>${myproject.name}</context> 
               </properties> 
          </deployable> 
    </deployables> 
</deployer> 
</configuration>  



       4)Cargo执行阶段和目标:

<executions>
     <execution>
          <id>start-container</id>
          <phase>pre-integration-test</phase>
          <goals>
          <goal>deployer-redeploy</goal><!--等同于redeploy,本地不支持redeploy -->
          </goals>
     </execution>
     <execution>
          <id>stop-container</id>
          <phase>post-integration-test</phase>
          <goals>
          <goal>deployer-undeploy</goal>
          </goals>
     </execution>
     <execution>
          <id>verify-deploy</id>
          <phase>install</phase>
          <goals>
          <goal>deployer-redeploy</goal>
          </goals>
     </execution>
     <execution>
          <id>clean-undeploy</id>
          <phase>pre-clean</phase>
          <goals>
          <goal>deployer-undeploy</goal>
          </goals>
     </execution>
</executions>



     这里需要注意的是执行目标中我使用了redeploy,而不是deploy。这是因为重复执行"install"构建步骤使用deploy会报项目已存在的错误,不利于重复部署,当然你使用"clean install"就没有问题。

     远程配置大体如此,你在根pom项目下运行"mvn install"就可以把最新WAR快照部署到远程Tomcat中运行。


转自:http://jdonee.iteye.com/blog/774387

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值