`
huangyuanmu
  • 浏览: 289767 次
  • 性别: 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的工作原理是通过一个名为`build.xml`的配置文件来定义一系列的任务,这些任务可以是编译源代码、创建JAR或WAR包、复制文件等。在描述中提到的...

    java ant发布项目到tomcat

    一个Ant项目通常包含一个build.xml文件,这是Ant执行的所有指令的中心。在这个文件中,我们定义目标(target)和任务(task),比如`compile`、`jar`和`deploy`等。每个目标都是一系列任务的集合,这些任务按照特定...

    ant自动发布工程

    "ant自动发布工程"是指利用Ant的脚本化特性,实现对Java工程的自动化发布流程,极大地提高了开发效率和减少了手动操作的错误。下面将详细阐述Ant在自动发布工程中的核心知识点。 1. **Ant基本概念** - **构建文件...

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

    **利用Ant脚本进行SVN增量构建** 1. **基本流程** - **获取代码**:首先,Ant脚本会从SVN仓库中检出或更新最新的代码到本地工作目录。 - **增量分析**:通过比较上一次构建与当前版本的差异,找出新增或修改的文件...

    Ant多渠道 多项目引用 打包Android项目

    本主题将深入探讨如何利用Ant进行多渠道打包和管理多个项目引用,这对于大型复杂项目或者需要针对不同市场发布不同版本的应用至关重要。 首先,Ant是Apache组织开源的一款Java构建工具,它基于XML文件定义构建过程...

    apache-ant-1.6.5-bin.zip_ ant 1.6.5_ant_ant-1.6.5_apache ant win

    Apache Ant 是一个开源的构建工具,广泛用于Java项目构建,由Apache软件基金...通过解压缩此ZIP文件并配置环境变量,用户可以利用Ant执行各种项目构建任务。详细的使用方法和特性可通过提供的readme.txt文件进行查阅。

    利用Ant自动编译Flex程序

    除了基本的编译任务,Ant还可以与Flex项目中的其他工具集成,比如FlexUnit进行自动化测试,或者与版本控制系统(如Git)配合进行代码管理。在FlexExamples压缩包中,可能包含了各种Flex应用的示例代码,我们可以为每...

    java安装程序,利用Ant构建打包工具

    下面将详细阐述如何利用Ant构建打包工具,以及如何创建可视化的Java安装程序。 1. **Java环境基础**:首先,确保你已经安装了Java Development Kit (JDK),因为Ant是用Java编写的,需要JDK运行环境。同时,Java应用...

    基于 umijs + electron + ant-design-pro 的项目模板开发代码

    9. **性能优化**:探讨如何利用umi和Electron的特性进行性能优化,如代码分割、静态资源缓存、服务端渲染等。 10. **安全考虑**:理解Electron应用可能面临的安全问题,如防止恶意代码注入、处理文件系统访问权限等...

    apache-ant-1.9.9.zip

    用户只需按照简单的步骤设置和配置,即可充分利用Ant的自动化功能,提高开发效率。同时,由于其开源和社区支持的性质,Ant还拥有丰富的插件和社区资源,可以帮助开发者解决各种复杂的构建问题。

    ant使用指南.rar

    通过“Ant使用指南”,你可以逐步学习如何设置和运行Ant项目,掌握如何编写和维护构建文件,以及如何利用Ant实现项目的自动化构建和部署。无论是初学者还是经验丰富的开发人员,都能从中获益,提升项目管理效率。

    使用Ant批量多渠道打包Android

    本资源将详细介绍如何使用Ant进行批量多渠道打包Android应用。 首先,你需要在你的项目中集成Ant。这通常意味着在项目根目录下创建一个名为`build.xml`的Ant构建文件。这个文件是Ant的配置中心,它定义了构建过程中...

    ant-1.6.5.jar.zip

    本文将深入探讨Ant 1.6.5的特点、功能以及如何使用它进行项目构建。 Ant的核心概念是构建文件,通常命名为`build.xml`,它定义了一系列的构建任务,如编译源代码、打包JAR文件、运行测试等。在Ant 1.6.5中,开发者...

    22_ant_完整操作一个用户管理的小例子_发布web项目和设置数据库

    标题中的“22_ant_完整操作一个用户管理的小例子_发布web项目和设置数据库”表明这是一个关于使用Apache Ant工具来构建、部署一个包含用户管理功能的Web应用,并配置数据库的教程。Apache Ant是一个Java库和命令行...

    android使用ant自动构建示例

    本示例将详细介绍如何在Android项目中利用Ant进行自动构建。 首先,我们需要理解Ant的基本概念。Ant是一个基于Java的任务驱动的构建系统,它的核心是build.xml文件,这个文件包含了构建项目的各种任务和规则。在...

    Ant打包编译部署工具学习笔记2(附件中含有测试项目)

    在"Ant打包编译部署工具学习笔记2"中,我们可以预期博主分享了关于如何利用Ant进行更复杂的构建操作,例如集成测试、优化和打包。这可能包括如何配置build.xml文件,添加自定义任务,以及如何处理依赖关系。由于没有...

    ant.rar +使用文档

    在"ant.rar +Apache+Ant+使用指南(精装本)"中,你将找到如何有效地利用Ant进行项目管理的详细指导。以下是一些关键知识点: 1. **安装与配置**:首先,你需要下载Apache Ant的二进制发行版,解压并设置环境变量`ANT...

    apache-ant-1.8.2

    此外,它还支持外部工具的集成,比如Maven的pom.xml文件可以通过Maven Ant Tasks进行解析和利用。这增强了Ant的灵活性,使得团队可以更方便地在不同的构建系统之间迁移。 Ant的一个重要优点是其可扩展性。通过编写...

Global site tag (gtag.js) - Google Analytics