陈炎 itmarksman@gmail.com 南京大学软件学院 2007.4.1 Ant简介 Ant一个优秀的构建工具 Ant意思是Another Neat Tool 陈炎 itmarksman@gmail.com 南京大学软件学院 2007.4.1
Ant的基本概念——Java 的makefile 通过配置一个XML文件快速开发创建和部署过程 使用buildfile(如build.xml)来完成一系列操作 一个流程脚本引擎,用于自动化调用程序完成项目的下列任务: 编译、打包、测试、调用系统命令(exec)…… 优点 平台无关的 基于XML,比make脚本好维护
Ant的安装 下载Ant包并解压 将解压后bin目录加入PATH中(如F:\ant\bin) 设置 ANT_HOME 环境变量 ANT_HOME=解压目录(如F:\ant) 通过运行:ant -version确认安装是否成功。
使用ant 运行ant 查阅antdoc 命令行模式下到buildfile所在目录 ant [-buildfile/-f] [文件名] [目标] 如果需要指定buildfile,则加入-buildfile或-f参数 查阅antdoc ant使用帮助:安装目录\docs\index.html ant任务介绍
Buildfile文件的结构
Buildfile文件 以XML文件来描述的 陈述式语法。 每个构建文件包含一个工程(project)。 每个工程包含若干个目标(target)。 目标可以依赖于其他的目标(depends)。 目标包含任务(task)。
简单的buildfile <?xml version="1.0"?> <project name=“myproject" default=“test“ basedir="." > <target name=“test" description=“ test ant."> <javac srcdir=“.”/> <echo message=“Ant is working properly”/> </target> </project> project: 每个构建文件以project为根节点。 Name=“myproject” 为工程命名。 default=“ant” :默认执行test.ant目标
简单的buildfile <?xml version="1.0"?> <project name=“myproject" default=“test" basedir="." > <target name=“test" description=“ test ant."> <javac srcdir=“.”/> <echo message=“Ant is working properly”/> </target> </project> JAVAC:用于编译JAVA源码 ECHO: 当构建抵达这里时,它将显示该文本内容
从命令行运行 Ant 是从命令行执行的 Ant 生成任务的一些典型输出: Buildfile: build.xml init: [mkdir] Created dir: E:\tutorials\ant\example\build [mkdir] Created dir: E:\tutorials\ant\example\dist compile: [javac] Compiling 8 source files to E:\tutorials\ant\example\build dist: [jar] Building jar: E:\tutorials\ant\example\dist\example.jar BUILD SUCCESSFUL Total time: 2 seconds
Ant中的属性 Ant 中的属性类似编程语言中的变量,它们都具有名称和值。然而与通常的变量不同,一经设置,Ant 中的属性就不可更改;它们是不可变的,就像 Java 语言中的 String 对象。 例:<property name="metal" value="beryllium"/> 生成文件的其他部分引用属性语法:${metal} 例如:<property name="metal-database" value="${metal}.db"/>
Ant中的DataType DataType可以很自然的处理构建过程中的文件和路径问题 常见的DataType: Environment环境 Fileset文件集 Patternset模式集 Filterset过录集 Path路径
定义依赖关系 生成一个项目一般需要许多步骤 —— 例如首先要编译源代码,然后将它打包为 Java 归档文件(Java Archive File,JAR)。 每个目标的定义依据的是在它在能够执行之前必须完成的其他所有目标。 使用 target 元素的 depends 属性来实现的。例如: <target name=“compile" depends="init"/> <target name=“package” depends=“compile"/> <target name=“clean" depends=“init"/>
定义依赖关系 在上面的例子中,如果让 Ant 完成 package 步骤,则依赖图如下: 注意目标出现在生成文件中的顺序并不重要:执行顺序是由depends 属性唯一确定的。 init compile clean package
定义依赖关系 实际执行系列是: init ,compile,init,compile,package
编译源码——javac任务(1) Javac任务 classpath:等价于 javac 的 –classpath 选项。 <target name=“compile” description="compile source"> <mkdir dir=“${dir.build}”/> <javac srcdir=“${dir.src}” destdir=“${dir.build}”> <include name=“**/*.java"/> </javac> </target> 其它有用属性: classpath:等价于 javac 的 –classpath 选项。 debug=“true”:指示编译器应该带调试信息编译源文件。
编译源码——javac任务(2) 引入jar包——添加到classpath中 <target name="compile” description="compile source"> <mkdir dir="${dir.build}"/> <javac srcdir="${dir.src}" destdir="${dir.build}" > <include name="**/*.java"/> <classpath> <pathelement location="lib/myObj.jar"/> <pathelement location="lib/junit-4.0.jar"/> </classpath> </javac> </target>
创建 JAR 文件 在编译 Java 源文件后,使用<jar>被打包. manifest 属性允许指定一个用作该 JAR 文件的清单的文件. <jar destfile="package.jar" basedir="classes"> <manifest> <attribute name=“Built-By” value=“${user.name}”/> <attribute name=“Main-class” value="package.Main"/> </manifest> </jar>
时间戳生成 tstamp任务一般在init目标中调用 最简单的格式<tstamp/> 在调用 tstamp 任务之后,我们能够根据日期命名该 JAR 文件,如下所示: <jar destfile="package-${DSTAMP}.jar" basedir="classes"/> 如果这个任务在 2007年 4月 1 日调用,该 JAR 文件将被命名为package-20070401.jar。
综合实例
创建目录 <mkdir dir="archive/metals/zinc"/> 首先要注意 / 被用作目录分隔符,这是 UNIX 和 Linux 的惯例。我们能够同样容易地使用 \,而不管平台是什么 —— Ant 能够处理任一种形式,甚至能够处理两种形式的混合。 mkdir 任务的另一个有用特性是它的如下能力:在父目录还不存在时创建它们。
删除目录 <delete dir="archive/metals/zinc"/> 这将删除指定的目录连同它包含的所有文件以及子目录。使用 file 属性而不是 dir 属性可以指定要删除的单个文件。
复制和移动文件及目录 在 Ant 中制作文件的一份拷贝很简单。例如: <copy file=“src/Test.java” tofile="src/TestCopy.java"/> 您还可以使用 move 来执行重命名操作而不是拷贝文件: <move file=“src/Test.java” tofile="src/TestCopy.java"/> 文件复制或移动到另一个目录
创建和解压缩 zip 及 tar 文件 zip 文件的 Ant 任务: <zip destfile="output.zip" basedir="output"/> 创建 tar 文件: <gzip src="output.tar" zipfile="output.tar.gz"/> 解压缩和提取文件: <unzip src="output.tar.gz" dest="extractDir"/>
制作java文档——javadoc任务 文件集——fileset(部分任务支持) <fileset dir=“引用路径”></fileset> 可以使用include、exclude特性 示例 <target name="javadoc" description="Generates javadoc."> <javadoc destdir="${dir.doc}"> <fileset dir="${dir.src}"> <include name="**/*.java"/> <exclude name=“**/*Test.java”/> </fileset> </javadoc> </target>
单元测试集成到Ant中 执行test.util.ServeTest <target name="unittest" description="run test" depends="compile"> <java fork="yes" classname="junit.textui.TestRunner" taskname="junit" failonerror="true"> <arg value="test.util.ServeTest"/> <classpath> <pathelement location="${dir.build}"/> <pathelement location="lib/myObj.jar"/> <pathelement location="lib/junit-4.0.jar"/> </classpath> </java> </target>
IDE 集成 由于 Ant 的普及性,大多数现代 IDE 现在都集成了对它的支持,其他许多 IDE 则在插件提供对它的支持。受支持的环境列表包括 JEdit 和 Jext 编辑器、Borland JBuilder、IntelliJ IDEA JavaDevelopment Environment for Emacs (JDEE)、NetBeans IDE、Eclipse 。
Ant的作用 软件部署。Ant能编译,打包,部署。 使用ant之后就不需要手工操作。 跨平台移植程序。Ant是跨平台的 。 方便不懂编程的人。 因为版本更新,因为修正bug需要一次又一次得重新部署。 这时只需要运行一次build.xml
使用ant实例 Eclipse中集成Ant实现快速开发
创建Eclipse工程 File→New→Project,打开”New Project“对话框,选择Java Project项目并点击Next。 输入工程名AntExample,并点击Finish。
添加Java代码 选择AntExample工程并且选择“File→New→Class”以打开“New Java Class”对话框 。 然后,填写包名为cn.nju,新类的名字为AntClass . 添加代码 public static void main(String args[]){ System.out.println("No worries."); }
在Eclipse中编写Ant Build文件 AntExample工程并且选择“New→File”。在“File Name”框中,输入build.xml,并且点击Finish 。 只要文件后缀是.xml的,Eclipse就把认为是可能的Ant buildfile 。
编辑 Ant buildfiles 在build.xml文件的右键菜单上选择Open With > Ant Editor 。打开build.xml文件。 在eclipse的ant Editor输入内容。 按Ctrl-Space 可以激活内容帮助功能。 可以应用自定义的模板(具体参见帮助文档) 可以检出编写错误。
Using the Ant view 用Outline来查看,编写 build.xml的结构。
运行ant的buildfile文件 方式一:在build.xml右键菜单上选择Run As > Ant Build 。 会弹出对话框来设置运行的参数。
执行结果
执行后生成文件
Eclipse中使用ant 参见Eclipse帮助文档
学习资料 antdocs:没什么比他更权威 《Ant极限编程》 《使用Ant进行JAVA开发》
Class end Thank you! 联系方式: 215机房 itmarksman@gmail.com