最近因为项目需要,学习和写了一个简单的ant脚本,记录一下

 1. 运行ant要安装ant工具,下载后解压无需安装就可以使用了,使用前配置系统变量path和ant-home 

  a. path:/ant-home/bin

  b. ant-home:ant 的解压目录,比如我的目录为D:\apache-ant-1.9.0

然后cmd中输入ant,如果提示

ant脚本检查java语句 执行ant脚本_ant脚本检查java语句

,表示可以使用了。

2. 下面开始例子

(1) ant 脚本主要部分为build.xml文件,它描述了项目的构建情况,如下

1 <?xml version="1.0" encoding="UTF-8" ?>
  2 <!-- project为根元素,default属性必须指定,是执行ant命令不指定target时默认执行的target名称 -->
  3 <project name="project_name" default="copy" basedir=".">
  4     <property file="build.properties" />
  5     <tstamp>
  6         <format property="build.time" pattern="yyyyMMddhhmm" />
  7     </tstamp>
  8 
  9     <!-- 设置编译路径,path元素定义了一个路径,该路径是所有项目的jar包引用路径,下面编译时要指定它      -->
 10 
 11     <path id="compile.classpath">
 12         <fileset dir="${dist.tdlib.home}">
 13             <include name="**/*.jar" />
 14         </fileset>
 15     </path>
 16 
 17     <!-- 1. 清理webApps下的classes,lib等,ant脚本一般以它开始 -->
 18     <target name="clean_webapp">
 19         <delete includeEmptyDirs="true" failonerror="false">
 20             <fileset dir="${project.web.home}/WEB-INF/classes" />
 21         </delete>
 22         <delete includeEmptyDirs="true" failonerror="false">
 23             <fileset dir="${project.web.home}/WEB-INF/lib" />
 24         </delete>
 25         <delete includeEmptyDirs="true" failonerror="false">
 26             <fileset dir="${project.web.home}/WEB-INF/jsp" />
 27         </delete>
 28     </target>
 29 
 30     <!-- 2. 清理准备目录,这里要说明一下,dist.home是一个我们定义的用来存放ant一个项目过程中,生成的文件信息的主目录注意,如果要清理的目录不存在的话,执行过程会报错并停止整个ant过程,所以ant前要先手动建好要清理的目录名,准备目录结构 -->
 31     <target name="clean">
 32         <echo message="清理目录......" />
 33         <delete includeEmptyDirs="true">
 34             <fileset dir="${dist.home}/classes" excludes="**/.svn" />
 35         </delete>
 36 
 37         <delete includeEmptyDirs="true">
 38             <fileset dir="${dist.home}/web" excludes="**/.svn" />
 39         </delete>
 40         <delete includeEmptyDirs="true">
 41             <fileset dir="${dist.home}/jar" excludes="**/.svn" />
 42         </delete>
 43         <delete includeEmptyDirs="true">
 44             <fileset dir="${dist.home}/tdlib" excludes="**/.svn" />
 45         </delete>
 46     </target>
 47 
 48 
 49     <!--3. SVN更新与清理处理-->
 50     <target name="update" depends="clean">
 51         <!-- 在保证环境干净和全版本更新的前提下,可不需要cleanup操作
 52             <exec dir="${svn.home}" executable="svn">
 53             <arg line="cleanup"/>
 54             </exec>-->
 55         <exec dir="${svn.home}" executable="svn">
 56             <arg line="update" />
 57         </exec>
 58     </target>
 59 
 60     <!-- 4. 设置编译所需要的目录-->
 61     <target name="init" depends="clean">
 62         <echo message="初始化java编译目录......" />
 63         <mkdir dir="${dist.home}/classes" />
 64         <mkdir dir="${dist.home}/tdlib" />
 65         <mkdir dir="${dist.home}/jar" />
 66         <mkdir dir="${dist.home}/web" />
 67         <echo message="初始化应用classes,lib,jsp目录......" />
 68         <mkdir dir="${project.web.home}/WEB-INF/classes" />
 69         <mkdir dir="${project.web.home}/WEB-INF/lib" />
 70         <mkdir dir="${project.web.home}/WEB-INF/jsp" />
 71     </target>
 72 
 73     <!-- 5. 拷贝jar包,准备编译
 74     (是把svn目录中开发上传的jar目录中的jar包,拷贝到dist.home的相应目录)
 75     -->
 76 
 77     <target name="copy_tdlib" depends="init">
 78         <echo message="拷贝公共包到jar目录......" />
 79         <copy flatten='true' todir="${dist.tdlib.home}">
 80             <fileset dir="${project.lib.home}" includes="**/*.jar"
 81                 excludes="*bin/portal*" />
 82         </copy>
 83     </target>
 84 
 85     <!-- 6. 编译java文件 -->
 86     <target name="muitl_jar" depends="copy_tdlib">
 87         <echo message="java编译......" />
 88         <!--6.1 javac -->
 89         <javac encoding="UTF-8" srcdir="${project.src.home}"
 90             destdir="${dist.classes.home}" debug="${compile.debug}"
 91             deprecation="${compile.deprecation}" optimize="${compile.optimize}"
 92             excludes="**/.svn/**">
 93             <exclude name="**/.svn/**,**/test/**" />
 94             <classpath refid="compile.classpath" />
 95         </javac>
 96 
 97         <!-- 6.2 复制classes -->
 98         <copydir src="${dist.classes.home}"
 99             dest="${project.web.home}/WEB-INF/classes" includes="**/*.class" />
100         <!-- 6.2 复制src下.hbm.xml,txt等其它文件 -->
101         <copydir src="${project.src.home}" dest="${dist.classes.home}"
102             excludes="**/.svn/**,**/*.java" />
103         <!-- 6.3 打jar包(该步骤是可选的,如果项目中有多个java子项目,且web项目依赖于java项目,则此时要把java项目打成jar包,
104         放到web项目的lib下,与引用lib(第 5. 点)同样处理),把classes打成一个jar包-->
105         <jar
106             jarfile="${dist.jar.home}/${jar.web.name}-${build.time}.jar"
107             basedir="${dist.classes.home}" excludes="**/.svn/**,**/*.java" />
108     </target>
109     <!-- 7. 拷贝相关包到jar目录 
110     (区别于第5. 点的拷贝,是把dist.home中所有生成和处理好的jar包拷贝到目的web应用的下WEB-INF下的lib中)
111     -->
112 
113     <target name="copy" depends="muitl_jar">
114         <echo message="拷贝jar包到工程中......" />
115         <copy flatten='true' todir="${project.web.home}/WEB-INF/lib">
116             <fileset dir="${dist.tdlib.home}" includes="**/*.jar" />
117         </copy>
118         <echo message="拷贝工程配置指引文件到工程......" />
119     </target>
120 
121     <!-- 8. 注意打war包时,destfile的名称,发布到weblogic时,如果把war包放到autodeploy目录下,weblogic会默认使用war包的名称作为contextPath(web应用
122         的访问路径),使用原来预先定义的path失效,所以此处的destfile名称宜直接使用你原来的path名称。 -->
123     <target name="war" depends="copy" description="Create WAR file">
124         <echo message="按工程打war包......" />
125         <war update="true" destfile="${contextPath}.war"
126             webxml="${project.web.home}/WEB-INF/web.xml">
127             <fileset dir="${project.web.home}" excludes="**/.svn/**" />
128         </war>
129     </target>
130 </project>

View Code

 

 另外,还可以书写一个.properties的配置信息文件,方便build.xml文件的书写、阅读和维护

1 #注意:注释中如果有(*)符号说明不同环境要特别注意修改
 2 
 3 #=========================
 4 #========基础配置=========包括工程属性、工程路径、编译属性、JDK路径设置等
 5 #=========================
 6 
 7 #工程属性
 8 project.title = project_title
 9  = project_name
10 project.version = 1.1-dev
11 #build.time = yyyy-MM-dd
12 
13 #JDK路径设置 (*)
14 #jdk.home = C:/j2sdk1.4.2_07
15 jdk.home = D:\Java\jdk1.6.0_31
16 ant.home = D:\apache-ant-1.9.0
17 
18 
19 #编译属性
20 compile.debug = true
21 compile.deprecation = false
22 compile.optimize = false
23 
24 #工程路径 (*) tdlib.home:第三方包路径 
25 project.home = ../../
26 svn.home = ${project.home}/project
27 build.home = ${project.home}/build
28 dist.home = ${project.home}/build/dist
29 
30 project.lib.home = ${project.home}/project/lib
31 project.src.home = ${project.home}/project/src
32 project.web.home=${project.home}/project/web
33 
34 dist.jar.home = ${dist.home}/jar
35 dist.tdlib.home = ${dist.home}/tdlib
36 dist.classes.home = ${dist.home}/classes
37 dist.web.home=${dist.home}/web
38 dist.war.home=${dist.home}/war
39 
40 
41 
42 
43 #jar包定义
44 export.name.prefix = ${}-${project.version}
45 
46 #datatrans
47 jar.web.name = ${export.name.prefix}-web

View Code