使用Ant自动化发布web工程
通常在web应用程序需要上线或测试时通常需要部署到类似于tomcat、jboss、weblogic或webspare这些web服务器中,为避免手动部署带来的操作繁琐、易出错等问题,这里使用ant进行标准化部署,这里我的web服务器采用了Nginx+Tomcat集群,so,需要编写的ant脚本如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="oprmonitor-user" basedir="." default="redeploy"> <!-- 系统环境配置 -->
<property environment="env" />
<!-- 源码路径 -->
<property name="src.dir" value="${basedir}/src" />
<!-- 编译路径 -->
<property name="dist.dir" value="${basedir}/dist" />
<!-- 静态资源路径 -->
<property name="web.root.dir" value="${basedir}/WebRoot" />
<!-- 当前工程类路径 -->
<property name="lib.dir" value="${basedir}/WebRoot/WEB-INF/lib" />
<!-- 部署描述符路径 -->
<property name="web.xml.dir" value="${basedir}/WebRoot/WEB-INF/web.xml" />
<!-- War包名称 -->
<property name="war.name" value="oprmonitor-user" />
<!-- Tomcat路径 -->
<property name="tomcat.dir" value="D:/soft/apache/apache-tomcat-7.0.67" />
<!-- Tomcat可执行脚本路径 -->
<property name="tomcat.bin.dir" value="${tomcat.dir}/bin" />
<!-- Tomcat发布应用路径 -->
<property name="tomcat.webapps.dir" value="${tomcat.dir}/webapps" />
<!-- Tomcat发布日志路径 -->
<property name="tomcat.logs.dir" value="${tomcat.dir}/logs" />
<!-- 当前时间 -->
<tstamp>
<format property="current.time" pattern="yyyyMMddHHmmss" locale="zh" />
</tstamp> <path id="build-classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path> <target name="init" description="验证操作系统">
<echo>验证操作系统...</echo>
<echo>${os.name}</echo>
<echo>验证操作系统完成</echo>
</target> <target name="clean" depends="init" description="清除旧的编译文件">
<echo>正在清除旧的编译文件...</echo>
<delete dir="${dist.dir}" />
<mkdir dir="${dist.dir}" />
<echo>清除旧的编译文件完成</echo>
</target> <target name="compile" depends="clean" description="编译源码">
<echo>正在编译源码...</echo>
<javac srcdir="${src.dir}" destdir="${dist.dir}"
includeantruntime="false">
<compilerarg line="-encoding UTF-8" />
<classpath refid="build-classpath" />
</javac>
<echo>编译源码完成</echo>
</target> <target name="generate-war" depends="compile" description="生成War包">
<echo>正在生成War包...</echo>
<delete dir="${basedir}/${war.name}.war" />
<war destfile="${basedir}/${war.name}.war" webxml="${web.xml.dir}"
excludes="*.svn">
<fileset dir="${web.root.dir}">
<include name="**/**.*" />
<exclude name="**/*.jar" />
<exclude name="**/*.class" />
</fileset>
<lib dir="${lib.dir}" />
<classes dir="${dist.dir}" />
</war>
<echo>生成War包完成</echo>
</target> <target name="stop-tomcat" depends="generate-war" description="停止Tomcat">
<echo>正在关闭Tomcat...</echo>
<exec executable="${tomcat.bin.dir}/shutdown.bat" failonerror="false"
output="${tomcat.logs.dir}/log.txt" append="true">
<env key="CATALINA_HOME" path="${tomcat.dir}" />
<arg value="/c shutdown.bat" />
</exec>
<!-- 检测tomcat的URL是否访问失败(用not标签),访问失败则认为tomcat已经关闭 -->
<waitfor maxwait="5" maxwaitunit="minute" checkevery="5">
<not>
<http url="http://localhost:8080/" />
</not>
</waitfor>
<echo>关闭Tomcat完成</echo>
</target> <target name="old-war-exist-check" depends="stop-tomcat"
description="检查旧的同名War包是否存在">
<echo>检查旧的同名War包是否存在...</echo>
<available file="${tomcat.dir}/webapps/${war.name}.war"
property="old-war-isexist" />
</target> <target name="backup-old-war" depends="old-war-exist-check" if="old-war-isexist"
description="如果旧的同名War包存在则备份">
<echo>旧的同名war包[存在],开始备份...</echo>
<copy tofile="${tomcat.dir}/webapps/${war.name}.war.bak.${current.time}">
<fileset file="${tomcat.dir}/webapps/${war.name}.war" />
</copy>
<echo>旧的同名war包[存在],备份完成</echo>
</target> <target name="delete-old-war" depends="backup-old-war" if="old-war-isexist"
description="如果旧的同名War包备份完成后则删除">
<echo>删除旧的同名war包...</echo>
<delete file="${tomcat.dir}/webapps/${war.name}.war" />
<echo>删除旧的同名war包完成</echo>
<echo>删除旧的同名war已解压工程...</echo>
<delete dir="${tomcat.dir}/webapps/${war.name}" />
<echo>删除旧的同名war已解压工程完成</echo>
</target> <target name="copy-new-war-into-webapps" depends="delete-old-war"
description="把新的War包复制到Tomcat的webapps中">
<echo>复制新的War包到tomcat的webapps目录下...</echo>
<copy tofile="${tomcat.webapps.dir}/${war.name}.war">
<fileset file="${basedir}/${war.name}.war" />
</copy>
<echo>复制新的War包到tomcat的webapps目录下完成</echo>
</target> <target name="start-tomcat" depends="copy-new-war-into-webapps"
description="启动Tomcat">
<echo>正在启动Tomcat...</echo>
<exec executable="${tomcat.bin.dir}/startup.bat" failonerror="false"
vmlauncher="false" output="${tomcat.logs.dir}/log.txt" append="true">
<env key="CATALINA_HOME" path="${tomcat.dir}" />
<arg value="/c startup.bat" />
</exec>
<!-- 检测tomcat的URL是否可以访问成功,访问成功则认为tomcat启动完成 -->
<waitfor maxwait="5" maxwaitunit="minute" checkevery="5">
<http url="http://localhost:8080/" />
</waitfor>
<echo>启动Tomcat完成</echo>
</target> <target name="redeploy" depends="start-tomcat" description="自动发布">
<echo>发布完成</echo>
</target> </project>
使用Ant自动化发布web工程的更多相关文章
- 使用Ant构建struts2 web工程,自动编译,打包成war
c&c++语言通常使用make脚本来构建和管理自己的工程,同样java也有自己的构建工具(Ant),使用时需要写一个biuld.xml,有点类似c&c++里的makefile. 一.首 ...
- svn + nginx unit + python3自动化发布web服务方法
本周将python web服务管理更换成nginx unit以后发现接口性能有了明显的提升,访问速度快了不少.不过有个很大的问题就是使用svn自动化发布以后,服务并没有刷新使用新的代码运行,而又不懂得 ...
- eclipse 发布web工程,修改tomcat端口
如果想修改tomcat发布的端口,有两种方法: 1.用记事本打开tomcat安装目录下的conf文件夹下的server.xml,找到<Connector port="8080" ...
- 服务器(Liunx)打包发布java web工程
Liunx服务器上打包发布web工程(开发工具Idea) 1.首先使用Idea自带的打包功能(点击package打包) 2.然后链接到服务器(我这里用的是Xshell链接工具) 3.将打好的war包传 ...
- java web工程发布以及解决tomcat闪退
1.tomcat闪退 a.环境变量错误 startup.bat最后假如PAUSE进入调试状态,双击startup.bat,可以看到错误,根据错误提示设置相应的环境变量,JAVA_HOME等. b.ec ...
- Jrebel简单的热部署一个web工程
前言:博主最近在做Hybris开发,漫长的启动时间大大的拖累了项目的进度,而Jrebel的出现就是为了减少项目重启的时间或者说修改了代码后直接不用重启就可以看到修改的结果,但是Hybris的部署一直没 ...
- 项目自动化建构工具gradle 入门5——在intellij中做一个gradle的web工程
之前的几个小节,都是纯手工建文件夹,纯手工拷贝war包,或者纯手工解压个zip看看结果,,,,这还是我写了玩的helloWorld.若是玩大工程.几十个人的团队协同开发时,这么玩,,,,暴躁的程序员估 ...
- 【Hello CC.NET】自动化发布时 Web.config 文件维护
在 <[Hello CC.NET]CC.NET 实现自动化集成> 的 HellowWorld 中经实现: 1.获取源码 2.编译项目 3.集成测试 4.Ftp发布项目 5.创建安装包 6. ...
- 如何设置eclipse开发的web工程自动发布到tomcat的webapps下?
使用eclipse开发web工程,在配置好服务器(tomcat)之后运行该web工程,发现能正常运行.但是问题在于,当你打开tomcat路径\webapps时,会发现没有该web应用(你的web工程名 ...
随机推荐
- 九、C# 合式类型
本章要描述如何最终完善类型声明. 1.重写Ojbect中的成员 重写ToString() 默认情况下,在任何对象上调用 ToString()会返回类的完全限定名称,所以有时候需要重载这个函数, ...
- OSG 安装配置
对于普通用户推荐直接下载安装包配置.如有特殊需求或想了解编译过程可参考网上文章自己编译后配置.(通常建议使用第一种方法即可) 本人安装经验: 失败:自己系统64位,VS2010 32位,开始自己动手编 ...
- 测试通过Word直接发布博文
这里是来自word 2013的一篇测试文章. 测试直接通过Word自带的bloger功能发布博客文章. 这里插入一张图片
- nodebb在阿里云主机部署过程
1.在centos上安装nodejswget http://nodejs.org/dist/v0.8.9/node-v0.8.9.tar.gztar zxvf node-v0.8.9.tar.gzcd ...
- utf8_general utf8_general utf8_bin区别
对与general来说 ß = s 是为true的 但是对于unicode来说 ß = ss 才是为true的, 其实他们的差别主要在德语和法语上,所以对于我们中国人来说,一般使用general,因为 ...
- Java高精度学习第三弹——ACM中使用JAVA的详细介绍
Chapter I. Java的优缺点各种书上都有,这里只说说用Java做ACM-ICPC的特点: (1) 最明显的好处是,学会Java,可以参加Java Challenge . (2) 对于熟悉C/ ...
- __block存储类型
__block存储类型 你可以指定引入一个变量为可更改的,即读-写的,通过应用__block 存储类型修饰符.局部变量的__block 的存储和 register.auto.static 等存储类型相 ...
- hdu不要62
Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来, ...
- iscc2016-basic-find-to-me
额 第一题就暴力搜索了 已知仿射加密变换为c=(11m+8)mod26,试对密文sjoyuxzr解密 #include <stdio.h> int main(void) { int m,c ...
- Python 字典 Print 格式化
__author__ = 'dell' ab = {'Swaroop': 'swaroopch@byteofpython.info', 'Larry': 'larry@wall.org', 'Mats ...