上次讲了ant的安装和配制,这一节主要来看一个例子来体验一下ant的魅力。
在开始例子之前,首先来看一下ant安装包目录结构
ant +--- README, LICENSE, fetch.xml, 其它文件. //一些提供基本信息的文件 +--- bin //这个目录下包含了一些启动ant的bat、shell等脚本 | +--- lib // 包含ant 及其依赖的jar | +--- docs // 一些文档放在这个目录下 | | | +--- images // 文档里面的一些图片 | | | +--- manual // ant文档 | +--- etc // 包含有各种作用的xsl文件: // - 创建一个各种任务输出到xml的加强报告 // - 迁移您的构建文件和摆脱“过时”的警告 // - ... 其它作用 ;-)
这一个本来应该放在第一节的。这里补充一下:)
开始我们的例子。
设想好构架
首先在上面的ant目录下新建一个test文件夹,以保存我们的例子,(当然你也可以在其它地方,这个依个人习惯)。
在test目录下有这样一个目录结构。
test +---src | +---com | +---sample | +---Project.java
Project.java代码如下:
//这里的代码可以随意,不写都没关系 public class Project { public static void main(String args[]) { System.out.println("test!"); } }
这个目录很像eclipse里面看到的项目结构,test就一个项目,要的就是这种效果:)
那我们如果用ant对这个项目进行编译、执行、打包呢?
首先我们要做的事是想好要把编译和打包后的class、jar文件放在哪里,我这里打算把编译的class文件夹放在test/build/classes文件夹下,把打包后的jar文件放在test/build/libs下。这里并不是真的要自己去建build、classes、libs文件夹,我会让ant自己去建些文件夹。
编写ant配制文件
下面将开始最关键的步骤,编写ant的build.xml文件。ant要做的事都写在这个文件里面,我把它放在test目录下。build.xml文件如下:
<?xml version="1.0" encoding="GB2312" ?> <project name="main" default="complie" basedir="."> <property name="src.dir" value="src"/> <property name="build.dir" value="build"/> <property name="build.lib" value="${build.dir}/lib"/> <property name="build.classes" value="${build.dir}/classes"/> <!-- build directories --> <target name="prepare"> <mkdir dir="${build.dir}"/> <mkdir dir="${build.lib}"/> <mkdir dir="${build.classes}"/> </target> <!--javac code--> <target name="complie" depends="prepare"> <javac srcdir="${src.dir}" destdir="${build.classes}" includeantruntime="on"/> </target> <!--java code--> <target name="run" depends="complie"> <java classname="Project" classpath="${build.classes}"/> </target> <!-- jar code --> <target name="jar" depends="complie"> <jar jarfile="${build.lib}/Project.jar" basedir="${build.classes}" > <manifest> <attribute name="Main-class" value="Project"/> </manifest> </jar> </target> <target name="clean"> <delete dir="${build.dir}"/> </target> </project>
对上面build.xml进行分析
<?xml version="1.0" encoding="GBK2312" ?>
这一句xml文件基本都有,需要注意的是encoding="GB2312" 这一句,如果不写或写成encoding="UTF-8",文件中有中文时会报错.
<project name="test" default="complie" basedir=".">
</project>
ant的所有内容必须包含在这个里边,name是你给它取的名字(任意写),basedir故名思意就是工作的根目录 .代表当前目录。default代表默认要做的任务。
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="build.lib" value="${build.dir}/lib"/>
<property name="build.classes" value="${build.dir}/classes"/>
这一堆是类似定义了java里面的变量(name是变量名,value是值),${XXX} 就是取上面定义的值。
<!-- build directories -->
<target name="prepare">
<mkdir dir="${build.dir}"/> //建build文件夹
<mkdir dir="${build.lib}"/> //建lib文件夹
<mkdir dir="${build.classes}"/> //建classes文件夹
</target>
这一陀是说定义了一个任务,名叫prepare。每个任务写成一个target,<mkdir>什么的就是建了一堆文件夹
<!--javac code-->
<target name="complie" depends="prepare">
<javac srcdir="${src.dir}" destdir="${build.classes}" includeantruntime="on"/>
</target>
这里建了一个叫complie的任务,depends就是它所依赖要做的任务。比如ant执行到<target name="complie" depends="prepare">这里的时候,它发现有一个依赖,就会去判断prepare这个任务有没有被执行过,如果执行过了就直接执行complie这个任务,如果没有就执行prepare这个任务。
<javac srcdir="${src.dir}" destdir="${build.classes}" includeantruntime="on"/> 这句就是编译,javac命令应该都熟悉,srcdir是指定要编译的文件夹,destdir是指定编译后的class文件放置的文件夹。
<!--java code-->
<target name="run" depends="complie">
<java classname="Project" classpath="${build.classes}"/>
</target>
这里是运行java代码。要先做这个任务,就要先做complie。classname指定class文件,classpath指定class文件的位置。
<!-- jar code -->
<target name="jar" depends="complie">
<jar jarfile="${build.lib}/Project.jar"
basedir="${build.classes}">
<manifest>
<attribute name="Main-class" value="Project"/>
</manifest>
</jar>
</target>
打包成jar文件。jarfile指定要生成的jar(带路径),basedir指定要打包的class文件。
<manifest>
<attribute name="Main-class" value="Project"/>
</manifest>
这个是在生成的jar文件里面的MANIFEST.MF文件里面加入”Main-class: Project“这样一句话。如果不加,你打包的jar文件,在命令行运行 java -jar Project.jar 会报错。
<target name="clean">
<delete dir="${build.dir}"/>
</target>
这个就是把build文件夹删除。如果运行这个任务的话,以前构建的东东就会被删除掉,可以重新构建。可以在prepare加了这个作为依赖。
运行
开始-->运行-->cmd进入命令行-->进入test目录
输入ant,就会默认运行complie任务,你也可以输入ant compile 、ant clean、ant run、ant jar 单独一个。
结果
假设你输入了ant jar,我们来看一下,现在的test文件夹下是怎么样子的。
test +---src | | | +---com | | | +---sample | | | +---Project.java |---build | | | +---classes | | | | | +---Project.class | +---libs | | | +---Project.jar |---build.xml