最近因为项目需要,学习和写了一个简单的ant脚本,记录一下
1. 运行ant要安装ant工具,下载后解压无需安装就可以使用了,使用前配置系统变量path和ant-home
a. path:/ant-home/bin
b. ant-home:ant 的解压目录,比如我的目录为D:\apache-ant-1.9.0
然后cmd中输入ant,如果提示

,表示可以使用了。
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}-webView Code
















