使用Maven Cargo 插件管理Tomcat6的部署
2014-02-11 09:37
344 查看
通过 把一个Web项目发布到本地或者远程Tomcat环境 来分析,
值得一提注意的是,本次示例我使用的是同一个Tomcat来让Cargo模拟本地和远程两种方式来发布war。
因为我们需要部署sample-webapp的快照,把它作为以Cargo方式部署必需的依赖。所以我们在3和4中间都首先要添加对它的依赖。
一、部署项目到本地环境
在<build>节点下配置Cargo:
1)首先配置的是<container>节点,详细描述如下:
2)接下来配置容器的属性,详细描述如下:
当然这里的属性还有很多,如果您想获知更多的参数定义,请点击Tomcat+6x。
3)Cargo有部署的概念,详细操作如下:
注:<deployalbe>中的<groupId>、<artifactId>和<type>必须定义。
4)Cargo除了可以运行"mvn cargo:deploy"这样的插件目标外,也可执行如clean、install这样的标准阶段目标,大多数时候我们也希望如此,详细操作如下:
本地配置完成,你在根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>节点,详细描述如下:
2)接下来配置容器的属性,详细描述如下:
3)Cargo远程部署,详细操作如下:
4)Cargo执行阶段和目标:
这里需要注意的是执行目标中我使用了redeploy,而不是deploy。这是因为重复执行"install"构建步骤使用deploy会报项目已存在的错误,不利于重复部署,当然你使用"clean install"就没有问题。
远程配置大体如此,你在根pom项目下运行"mvn install"就可以把最新WAR快照部署到远程Tomcat中运行。
转自:http://jdonee.iteye.com/blog/774387
<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
相关文章推荐
- 实现单Tomcat多Server配置
- 生产环境下的Tomcat配置
- tomcat在opensuse下开机自启失败的原因分析及解决方法
- jsp项目中更改tomcat的默认index.jsp访问路径的方法
- Tomcat 多端口 多应用
- tomcat 5.0 + apache 2.0 完全安装步骤详解
- Tomcat安全设置 win2003 下tomcat权限限制
- Jsp和PHP共用80端口整合Apache和Tomcat(访问时无需加端口号)
- Tomcat服务器 安全设置第1/3页
- tomcat 6.0.20在一个机器上安装多个服务的方法
- Tomcat 5.5 数据库连接池配置
- Tomcat内存溢出分析及解决方法
- apache tomcat 一个网站多域名的实现方法
- Tomcat无法加载css和js等静态资源文件的解决思路
- Apache与Tomcat服务器整合的基本配置方法及概要说明
- tomcat 5.5连接池配置,如何让工程为默认工程
- eclipse3.2.2 + MyEclipse5.5 + Tomcat5.5.27 配置数据库连接池
- 基于Java Tomcat和激活MyEclips的深入理解
- tomcat antiResourceLocking antiJARLocking 的作用和用法