`
huangyuanmu
  • 浏览: 286783 次
  • 性别: Icon_minigender_1
  • 来自: 龙城
社区版块
存档分类
最新评论

利用ant进行项目发布

阅读更多

虽然现在maven很流行,我也看了下,屡屡浅尝辄止。还是比较喜欢ant,而且对于我当前的工作,ant也够用了,所以对maven的学习也就没了兴趣,仅剩下对新事物的热情。

 

一个较复杂的工程项目可能包含很多目录,包括源代码文件、资源文件、文档等等一系列的东东,而且在项目发布时,除了考虑自动化、方便性(比如从cvs取最新版本、编译、打包、关闭应用服务器、部署、重新启动服务器等等)以外,还要考虑一些用户级的问题(比如修改了页面js后,怎样保证用户端从服务器端下载最新的js而不是用其本地浏览器缓存的js),另外基于源代码安全性考虑,可能还要进行代码混淆编译等。

 

<?xml version="1.0" encoding="UTF-8"?>
<!--
	 功能:cvs更新、编译(同时混淆)、生成注册文件、给页面文件的css和js引用增加版本号、打包、部署、运行tomcat等
	 作者:huangyuanmu
	 日期:2008-07-02.
-->
<project basedir="." default="build" name="wxwtdz">
	<!-- property -->
	<property file="resource/ant.properties" />
	<property environment="env" />
	<property name="tomcat.path" value="${tomcat.path}" />
	<property name="server.mac" value="${server.mac}" />
	<property name="cvsroot" value="${cvs.root}" />
	<property name="cvs.password" value="${cvs.password}" />
	<property name="cvs.module.name" value="xxx项目" />
	<property name="websrc.dir" value="web" />
	<property name="src.common.dir" value="common" />
	<property name="src.shell.dir" value="shell" />
	<property name="src.sys.dir" value="sys" />
	<property name="src.hjgl.dir" value="hjgl" />
	<property name="src.pzgl.dir" value="pzgl" />
	<property name="src.sbzs.dir" value="sbzs" />
	<property name="src.zhcx.dir" value="zhcx" />
	<property name="src.zhdy.dir" value="zhdy" />
	<property name="src.zhjb.dir" value="zhjb" />
	<property name="src.scheduling.dir" value="scheduling" />
	<property name="src.resource.dir" value="resource" />
	<property name="src.rpc.dir" value="rpc" />
	<property name="customize.dir" value="customize" />
	<property name="customize.resource.dir" value="customize/resource" />
	<property name="build.dir" value="build" />
	<property name="dist.dir" value="dist" />
	<property name="deploy.dir" value="${tomcat.path}/webapps" />
	<property name="dest.jar" value="wtdz.jar" />
	<property name="dest.war" value="wtdz.war" />
	<property name="dest.dir" value="wtdz" />
	<property name="jdk.source" value="1.5" />
	<property name="jdk.target" value="1.5" />
	<property name="deploy.web.dir" value="wtdz" />
	
	<property name="training.dir" value="training" />
	<property name="training.resource.dir" value="training/resource" />
	<property name="training.war" value="wtdzcs.war" />

	<!-- patternset -->
	<patternset id="jar.pattern">
		<include name="**/*.jar" />
	</patternset>
	<patternset id="config.pattern">
		<include name="**/*.xml" />
		<include name="**/*.properties" />
		<include name="**/*.prop" />
		<include name="**/*.conf" />
		<include name="**/*.tld" />
		<include name="**/*.ftl" />
		<include name="**/*.vm" />
	</patternset>
	<patternset id="build.pattern">
		<include name="log" />
		<include name="**/*.jar" />
		<include name="**/*.class" />
		<include name="**/*.vm" />
		<include name="**/*.rep" />
		<include name="**/*.exe" />
		<include name="**/*.log" />
		<include name="**/*.bat" />
		<include name="**/*.xls" />
		<include name="**/*.xml" />
		<include name="**/*.properties" />
		<include name="**/*.prop" />
		<include name="**/*.conf" />
		<include name="**/*.tld" />
		<include name="**/*.ftl" />
		<include name="**/*.jsp" />
		<include name="**/*.htm" />
		<include name="**/*.html" />
		<include name="**/*.js" />
		<include name="**/*.css" />
		<include name="**/*.swf" />
		<include name="**/*.jpg" />
		<include name="**/*.gif" />
		<include name="**/*.png" />
		<include name="**/*.rar" />
		<include name="**/*.wmv" />
		<include name="**/*.mp3" />
		<include name="**/*.3gp" />
		<include name="**/*.doc" />
		<include name="**/*.htc" />
		<exclude name="WEB-INF/**/*" />
		<exclude name="**/web.xml" />
	</patternset>
	<patternset id="src.pattern">
		<include name="**/*.java" />
		<include name="**/*.vm" />
		<include name="**/*.rep" />
		<include name="**/*.exe" />
		<include name="**/*.xml" />
		<include name="**/*.xls" />
		<include name="**/*.properties" />
		<include name="**/*.prop" />
		<include name="**/*.conf" />
		<include name="**/*.tld" />
		<include name="**/*.ftl" />
		<include name="**/*.jsp" />
		<include name="**/*.htm" />
		<include name="**/*.html" />
		<include name="**/*.js" />
		<include name="**/*.css" />
		<include name="**/*.swf" />
		<include name="**/*.jpg" />
		<include name="**/*.gif" />
		<include name="**/*.png" />
		<exclude name="**/web.xml" />
	</patternset>

	<!-- path -->
	<path id="compile.classpath">
		<fileset dir="${tomcat.path}/lib">
			<patternset refid="jar.pattern" />
		</fileset>
		<fileset dir="${websrc.dir}/WEB-INF/lib">
			<patternset refid="jar.pattern" />
		</fileset>
		<fileset dir="${build.dir}/WEB-INF/classes">
			<patternset refid="build.pattern" />
		</fileset>
	</path>

	<!-- taskdef -->

	<!-- 给页面文件中的js和css引用增加版本号 -->
	<taskdef name="addVersion" classname="cn.xxx.wtdz.ant.task.AddJsAndCssVersionToVm" classpath="bin/ant-task.jar">
	</taskdef>

	<!-- 利用混淆器进行编译 -->
	<taskdef resource="jockytasks">
	</taskdef>

	<!-- 生成注册码文件 -->
	<taskdef name="genRegKey" classname="cn.xxx.wtdz.ant.task.GenRegKey" classpath="bin/ant-task.jar">
	</taskdef>

	<!-- target -->

	<!-- 删除构建发布文件夹 -->
	<target name="clean">
		<delete dir="${build.dir}" />
		<delete dir="${dist.dir}" />
	</target>

	<!-- 创建构建发布文件夹 -->
	<target name="init" depends="clean">
		<mkdir dir="${build.dir}" />
		<mkdir dir="${build.dir}/WEB-INF/classes" />
		<mkdir dir="${dist.dir}" />
	</target>

	<!-- cvs更新(check out) -->
	<target name="checkout">
		<cvspass cvsroot="${cvs.root}" password="${cvs.password}" passfile="ant-cvs.cvspass" />
		<cvs command="-q checkout -d wxwtdz -P" failonerror="true" dest=".." cvsroot="${cvs.root}" package="${cvs.module.name}" passfile="ant-cvs.cvspass" />
	</target>

	<!-- 从源文件夹中拷贝文件到构建文件夹中 -->
	<target name="copysrc" depends="init">
		<copy todir="${build.dir}/src" overwrite="true">
			<fileset dir="${src.common.dir}">
			</fileset>
			<fileset dir="${src.shell.dir}">
			</fileset>
			<fileset dir="${src.sys.dir}">
			</fileset>
			<fileset dir="${src.hjgl.dir}">
			</fileset>
			<fileset dir="${src.pzgl.dir}">
			</fileset>
			<fileset dir="${src.sbzs.dir}">
			</fileset>
			<fileset dir="${src.zhcx.dir}">
			</fileset>
			<fileset dir="${src.zhdy.dir}">
			</fileset>
			<fileset dir="${src.zhjb.dir}">
			</fileset>
			<fileset dir="${src.scheduling.dir}">
			</fileset>
			<fileset dir="${src.resource.dir}">
				<exclude name="log4j.xml"/>
			</fileset>
			<fileset dir="${src.rpc.dir}">
			</fileset>
			<fileset dir="${customize.resource.dir}">
			</fileset>			
		</copy>
		<copy todir="${build.dir}">
			<fileset dir="${websrc.dir}">
				<exclude name="WEB-INF/classes/**/*" />
			</fileset>
		</copy>
		<copy todir="${build.dir}" overwrite="true">
			<fileset dir="${customize.dir}">
				<exclude name="resource/**" />
			</fileset>
		</copy>
	</target>

	<!-- 编译、拷贝文件 -->
	<target name="compile" depends="copysrc">
		<jocky jar="bin/jocky.jar" enable="true" level="private">
		</jocky>
		<javac srcdir="${build.dir}/src" destdir="${build.dir}/WEB-INF/classes" debug="true" source="1.5" target="1.5" >
			<classpath refid="compile.classpath" />
		</javac>
		<copy todir="${build.dir}/WEB-INF/classes" overwrite="true">
			<fileset dir="${build.dir}/src">
				<patternset refid="config.pattern" />
			</fileset>
		</copy>
		<delete dir="${build.dir}/src" />
	</target>

	<!-- 给页面文件中的css和js引用增加版本号 -->
	<target name="addPageVersion" depends="compile">
		<addVersion path="${build.dir}" />
	</target>

	<!-- 构建war包 -->
	<target name="build" depends="addPageVersion">
		<!--<target name="build" depends="compile">-->
		<delete file="${dist.dir}/${dest.war}" />
		<mkdir dir="${build.dir}/log" />
		<genRegKey path="${dist.dir}" key="${server.mac}"/>
		<war destfile="${dist.dir}/${dest.war}" webxml="${build.dir}/WEB-INF/web.xml">
			<webinf dir="${build.dir}/WEB-INF" />
			<fileset dir="${build.dir}">
				<patternset refid="build.pattern" />
			</fileset>
			<fileset file="${dist.dir}/key.properties">
			</fileset>
		</war>
		<delete file="${dist.dir}/key.properties" />
	</target>

	<!-- 构建试用版war包 -->
	<target name="buildDebug" depends="addPageVersion">
		<delete file="${dist.dir}/${dest.war}" />
		<mkdir dir="${build.dir}/log" />
		<war destfile="${dist.dir}/${dest.war}" webxml="${build.dir}/WEB-INF/web.xml">
			<webinf dir="${build.dir}/WEB-INF" />
			<fileset dir="${build.dir}">
				<patternset refid="build.pattern" />
			</fileset>
		</war>
	</target>

	<!-- 部署前先关闭tomcat,并压缩文件 -->
	<target name="zip" depends="addPageVersion">
		<echo message="now stopping tomcat service" />
		<exec dir="${tomcat.path}/bin" executable="cmd">
			<env key="CATALINA_HOME" path="${tomcat.path}" />
			<arg value="/c shutdown.bat" />
		</exec>
		<delete file="${deploy.dir}/${dest.war}" />
		<delete file="${deploy.dir}/${dest.dir}" />
		<genRegKey path="${build.dir}" key="${server.mac}"/>
		<zip destfile="${deploy.dir}/${dest.war}">
			<fileset dir="${build.dir}">
				<include name="**/*" />
			</fileset>
		</zip>
	</target>

	<!-- 解压文件,并启动tomcat -->
	<target name="deploy" depends="zip">
		<echo message="deploy web project to ${deploy.dir}..." />
		<unzip dest="${deploy.dir}/${deploy.web.dir}" overwrite="true" src="${deploy.dir}/${dest.war}">
		</unzip>
		<echo message="now starting tomcat service" />
		<exec dir="${tomcat.path}/bin" executable="java.exe">
			<env key="CATALINA_HOME" path="${tomcat.path}" />
			<arg line="-jar -Duser.dir=${tomcat.path} ${tomcat.path}/bin/bootstrap.jar start" />
		</exec>
	</target>

	<!-- 把项目所有class文件打包 -->
	<target name="archive" depends="compile">
		<delete file="${dist.dir}/${dest.jar}" />
		<jar destfile="${dist.dir}/${dest.jar}" basedir="${build.dir}/WEB-INF/classes" />
	</target>

	<!-- 导出远程调用接口程序(住房出租票证管理接口) -->
	<target name="buildrpc" depends="compile">
		<delete file="${dist.dir}/wtdz-rpc.jar">
		</delete>
		<mkdir dir="${build.dir}/rpc/src" />
		<mkdir dir="${build.dir}/rpc/classes" />
		<copy todir="${build.dir}/rpc/src">
			<fileset dir="${src.rpc.dir}">
				<exclude name="**/impl/*" />
				<exclude name="**/aop/*" />
			</fileset>
		</copy>
		<jocky enable="false">
		</jocky>
		<javac srcdir="${build.dir}/rpc/src" destdir="${build.dir}/rpc/classes" debug="true">
			<classpath refid="compile.classpath" />
		</javac>
		<jar destfile="${dist.dir}/wtdz-rpc.jar">
			<fileset dir="${build.dir}/rpc/classes" includes="**/*.class" />
			<zipfileset src="${websrc.dir}/WEB-INF/lib/hessian-3.1.3.jar">
			</zipfileset>
		</jar>
		<delete dir="${build.dir}/rpc/src">
		</delete>
		<delete dir="${build.dir}/rpc/classes">
		</delete>
	</target>
	
	<!-- 从源文件夹中拷贝文件到构建文件夹中 -->
	<target name="copysrcTraining" depends="copysrc">		
		<copy todir="${build.dir}/src" overwrite="true">
		<!-- 培训版本:从training文件夹中拷贝文件到构建文件夹中 -->
			<fileset dir="${training.dir}">
				<include name="cn/**"/>
			</fileset>
			<fileset dir="${training.resource.dir}">
			</fileset>		
		</copy>
		
		<copy todir="${build.dir}" overwrite="true">
			<fileset dir="${training.dir}">
				<include name="images/**"/>
			</fileset>
		</copy>
	</target>
	
	<!-- 编译、拷贝文件 -->
	<target name="compileTraining" depends="copysrcTraining">
		<jocky jar="bin/jocky.jar" enable="true" level="private">
		</jocky>
		<javac srcdir="${build.dir}/src" destdir="${build.dir}/WEB-INF/classes" debug="true" source="1.5" target="1.5" >
			<classpath refid="compile.classpath" />
		</javac>
		<copy todir="${build.dir}/WEB-INF/classes" overwrite="true">
			<fileset dir="${build.dir}/src">
				<patternset refid="config.pattern" />
			</fileset>
		</copy>
		<delete dir="${build.dir}/src" />
	</target>
	
	<!-- 给页面文件中的css和js引用增加版本号 -->
	<target name="addPageVersionTraining" depends="compileTraining">
		<addVersion path="${build.dir}" />
	</target>
	
	<!-- 构建war包 -->
	<target name="buildTraining" depends="addPageVersionTraining">
		<!--<target name="build" depends="compile">-->
		<delete file="${dist.dir}/${dest.war}" />
		<mkdir dir="${build.dir}/log" />
		<genRegKey path="${dist.dir}" key="${server.mac}"/>
		<war destfile="${dist.dir}/${dest.war}" webxml="${build.dir}/WEB-INF/web.xml">
			<webinf dir="${build.dir}/WEB-INF" />
			<fileset dir="${build.dir}">
				<patternset refid="build.pattern" />
			</fileset>
			<fileset file="${dist.dir}/key.properties">
			</fileset>
		</war>
		<delete file="${dist.dir}/key.properties" />
	</target>
	
	<target name="training" depends="buildTraining">
		<move file="${dist.dir}/${dest.war}" tofile="${dist.dir}/${training.war}"/>
	</target>

</project>
分享到:
评论
3 楼 meimei727 2015-04-02  
<!-- 给页面文件中的js和css引用增加版本号 -->  
    <taskdef name="addVersion" classname="cn.xxx.wtdz.ant.task.AddJsAndCssVersionToVm" classpath="bin/ant-task.jar">  
    </taskdef>
执行的时候会说找不到这个类,还有classpath="bin/ant-task.jar"是什么意思?
2 楼 huangyuanmu 2010-06-03  
spp_1987 写道
要是部署前 没有关闭tomcat 会有什么状况出现,
但是我用简单的web程序测试了下,并没有什么错误


注意这个target
  <target name="zip" depends="addPageVersion"> 
         <echo message="now stopping tomcat service" /> 
         <exec dir="${tomcat.path}/bin" executable="cmd"> 
             <env key="CATALINA_HOME" path="${tomcat.path}" /> 
             <arg value="/c shutdown.bat" /> 
         </exec> 
         <delete file="${deploy.dir}/${dest.war}" /> 
         <delete file="${deploy.dir}/${dest.dir}" /> 
         <genRegKey path="${build.dir}" key="${server.mac}"/> 
         <zip destfile="${deploy.dir}/${dest.war}"> 
             <fileset dir="${build.dir}"> 
                 <include name="**/*" /> 
             </fileset> 
         </zip> 
     </target> 

其中有关闭tomcat的步骤。

所以,你的tomcat在运行状态下,是不影响的。
1 楼 spp_1987 2010-05-31  
要是部署前 没有关闭tomcat 会有什么状况出现,
但是我用简单的web程序测试了下,并没有什么错误

相关推荐

    基于MyEclipse开发平台的利用ant来发布项目

    基于MyEclipse开发平台的利用ant来发布项目,Ant实战级的宝典

    利用ant脚本 自动构建svn增量.docx

    利用ant脚本 自动构建svn增量/全量 系统程序升级包 标签: antsvn自动化测试发布  分类: ant 不会用ant打包、部署项目的工程师,不是一个好程序员(测试) 副标题:利用ant脚本 自动构建svn增量/全量 系统程序...

    使用ANT远程发布Web项目

    1)利用Ant将Web项目自动打包成war文件 2)远程发布到Tomcat服务器

    Ant 1.9.2 API (CHM格式)

    Ant是Java程序员的一个好的工具,主要可以帮助程序员进行java项目的的管理,包括批量编译、部署、文档生成等工作,其用途远不止如此,ant内置了大量的API进行各种文件系统操作,在各种应用服务器中都被广泛应用于...

    jocky 混肴编译rar包(ant和插件俩个版本)

    在应用的开发过程中,我们往往都会有一个Ant脚本,通过该脚本,能够对应用进行编译、打包、发布等一系列过程。因此,Jocky的最佳切入点便是对Ant的支持。 在Ant中使用Jocky非常简单: 1. 将lib\jocky-ant.jar ...

    iuhyiuhkjh908u0980

    [转]使用Ant进行项目构建之二 ... 前面已经把ant的基本运行环境搭建好了,在接下来的工作中,将一步一步的开始构建我们的项目。选择项目目录结构:一个项目开始的时候,选择一个合适的项目目录结构,是一件很重要的...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    14.4.3 编写本项目的Ant文件 14.4.4 配置本项目的web.xml文件 14.5 编写内容管理系统的JSP页面 14.5.1 用户注册画面regedit.jsp 14.5.2 用户登录画面login.jsp 14.5.3 设定内容类别画面type.jsp 14.5.4 发布内容画面...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    14.4.3 编写本项目的Ant文件 14.4.4 配置本项目的web.xml文件 14.5 编写内容管理系统的JSP页面 14.5.1 用户注册画面regedit.jsp 14.5.2 用户登录画面login.jsp 14.5.3 设定内容类别画面type.jsp 14.5.4 发布内容画面...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    14.4.3 编写本项目的Ant文件 14.4.4 配置本项目的web.xml文件 14.5 编写内容管理系统的JSP页面 14.5.1 用户注册画面regedit.jsp 14.5.2 用户登录画面login.jsp 14.5.3 设定内容类别画面type.jsp 14.5.4 发布内容画面...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    14.4.3 编写本项目的Ant文件 14.4.4 配置本项目的web.xml文件 14.5 编写内容管理系统的JSP页面 14.5.1 用户注册画面regedit.jsp 14.5.2 用户登录画面login.jsp 14.5.3 设定内容类别画面type.jsp 14.5.4 发布内容画面...

    Maven2 的新特性.7z

    不会随项目发布。 • system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。 的使用举例: &lt;groupId&gt;hibernate &lt;artifactId&gt;hibernate &lt;version&gt;3.0.3 &lt;scope&gt;test 7. 传递依赖...

    apache-tomcat-7.0.82

    Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个...事实上,在很多应用服务器的发布中都包含了Ant。另外,在Jsp1.2中,可以利用标签库实现Java代码与Html文件的分离,使Jsp的维护更方便。

    网狐荣耀版开发使用常见问题解答

    xcodes打开项目工程,进行开发者的配置与发布选项的配置,进行游戏名称与版本号修改等,进行编译,发布等。这里面的游戏开发者最好是企业开发者账号,因为这样就不用上传到苹果商店了。可以随便分发。 三、导出...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    该案例既提供了ide无关的、基于ant管理的项目源码,也提供了基于netbeans ide的项目源码,最大限度地满足读者的需求。 作者简介: 李刚,从事10年的Java EE应用开发。曾任LITEON公司的J2EE技术主管,负责该公司的...

    新版Android开发教程.rar

    o Apache Ant 1.6.5 or later for Linux and Mac, 1.7 or later for Windows o Not Not Not Not compatible with Gnu Compiler for Java (gcj) Note: Note: Note: Note: If JDK is already installed on your ...

    Eclipse权威开发指南2.pdf

    5.5.1 对项目资源进行重命名、移动和删除..... 151 5.5.2 取消修改:使用替换和比较操作..... 152 5.5.3 通过建立分支来进行版本维护和新版本开发..... 152 5.6 其他功能...... 152 5.6.1 编辑器中的快速差别...

    Eclipse权威开发指南3.pdf

    5.5.1 对项目资源进行重命名、移动和删除..... 151 5.5.2 取消修改:使用替换和比较操作..... 152 5.5.3 通过建立分支来进行版本维护和新版本开发..... 152 5.6 其他功能...... 152 5.6.1 编辑器中的...

    Eclipse权威开发指南1.pdf

    5.5.1 对项目资源进行重命名、移动和删除..... 151 5.5.2 取消修改:使用替换和比较操作..... 152 5.5.3 通过建立分支来进行版本维护和新版本开发..... 152 5.6 其他功能...... 152 5.6.1 编辑器中的...

    Spring-Reference_zh_CN(Spring中文参考手册)

    Ant风格的pattern 4.7.2.2. classpath*: 前缀 4.7.2.3. 其他关于通配符的说明 4.7.3. FileSystemResource 提示 5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 ...

Global site tag (gtag.js) - Google Analytics