目的:
- 编写类文件
- 编译源文件,将生成的class文件放在指定的位置
- 将它打成jar,并放在指定的位置
- 运行这个jar
编写源文件
Test.java:
package com.ant.test;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Test {
public String getTime() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd HH:MM:ss");
Calendar c = Calendar.getInstance();
return format.format(c.getTime());
}
}
这个类有一个方法,该方法返回当前系统的日期和时间。
测试类,
HelloWorldAnt.java:
package com.ant.test;
public class HelloWorldAnt {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Hello World Ant.");
String time = new Test().getTime();
System.out.println("Time is :" + time);
}
}
在project目录下新建build.xml文件,文件内容:
<?xml version="1.0" encoding="utf-8"?>
<project name="HelloWorldAnt" default="run" basedir=".">
<property name="src.dir" value="src"></property>
<property name="dest.dir" value="dest"></property>
<property name="classes.dir" value="${dest.dir}/classes"></property>
<property name="jarfile" value="${dest.dir}/helloworldAnt.jar"></property>
<target name="init">
<mkdir dir="${classes.dir}"></mkdir>
<echo message="Create dir ${dest.dir}."></echo>
</target>
<target name="compile" depends="init">
<javac srcdir="${src.dir}" destdir="${classes.dir}"></javac>
<echo>Compile source code.</echo>
</target>
<target name="jar" depends="compile">
<jar jarfile="${jarfile}" basedir="${classes.dir}" includes="**/*.class"></jar>
<echo>Create jar file.</echo>
</target>
<target name="run" depends="jar">
<java classpath="${jarfile}" classname="com.ant.test.HelloWorldAnt"></java>
<echo>Run jar file.</echo>
</target>
<target name="clean">
<delete dir="${dest.dir}"></delete>
<delete file="${jarfile}"></delete>
</target>
</project>
Ok,接下来就是执行Ant任务,完成我们的目标。
将build.xml拖放到Ant视图。
然后执行run[default],控制台得到如下输出:
Buildfile: D:\qincidong\workspace\ant\build.xml
init:
[mkdir] Created dir: D:\qincidong\workspace\ant\dest\classes
[echo] Create dir dest.
compile:
[javac] Compiling 2 source files to D:\qincidong\workspace\ant\dest\classes
[echo] Compile source code.
jar:
[jar] Building jar: D:\qincidong\workspace\ant\dest\helloworldAnt.jar
[echo] Create jar file.
run:
[java] Hello World Ant.
[java] Time is :2013-30-21 11:06:16
[echo] Run jar file.
BUILD SUCCESSFUL
Total time: 1 second
上面的
[java] Hello World Ant.
[java] Time is :2013-30-21 11:06:16
就是程序运行后的结果。
OK,下面对上面的配置文件做一些解释。
project元素:
<project>是Ant脚本的根元素,Ant的所有内容都放在这对标签之间。
name是你给它取的名字,一般与工程名相同。
default:默认要执行的任务[Target],如上面的你不指定任务名称时,默认执行run这个Target.
![](https://img-blog.csdn.net/20130621113517906?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcWluY2lkb25n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这是在命令行执行的结果,没有指定执行的任务名称,从执行结果我们知道,执行的是run这个Target。
basedir:工作根目录,.表示当前目录。
property元素:
<property>:就像程序中的变量一样,通过name和value属性指定,在其他地方用${变量名}引用。
target元素:
<target>:我们要做的每一件事情都可以写成一个Target,例如上面init,compile,jar,run,clean总共5个任务。
name:任务的名称
depends:依赖的任务,如上面的compile任务依赖init,即先执行init,再执行compile。
init target:
<target name="init">
<mkdir dir="${classes.dir}"></mkdir>
<echo message="Create dir ${dest.dir}."></echo>
</target>
这个任务就是创建一个文件夹,文件夹的名字是${classes.dir}代笔的文件夹,即projectName/dest/classes。
mkdir标签用于创建一个文件夹,dir指定要创建的文件夹。
echo:输出一些信息。
compile target:
<target name="compile" depends="init">
<javac srcdir="${src.dir}" destdir="${classes.dir}"></javac>
<echo>Compile source code.</echo>
</target>
这个任务就是编译java源文件,它依赖init任务,即创建好编译生成的.class文件的位置后,编译源文件。
使用javac命令编译,srcdir指定源文件的位置,destdir指定生成的class文件的位置。
jar target:
<target name="jar" depends="compile">
<jar jarfile="${jarfile}" basedir="${classes.dir}" includes="**/*.class"></jar>
<echo>Create jar file.</echo>
</target>
在编译生成.class文件后,使用jar命令打包成jar文件。
jarfile:指定生成的jar文件
basedir:指定class文件的位置
includes:指定打包到jar的文件。
**/*.class:所有目录下的.class文件。
run target:
<target name="run" depends="jar">
<java classpath="${jarfile}" classname="com.ant.test.HelloWorldAnt"></java>
<echo>Run jar file.</echo>
</target>
在打包成jar文件后,使用java命令执行这个jar文件。
classpath:指定jar的位置
classname:指定主程序。
clean target:
<target name="clean">
<delete dir="${dest.dir}"></delete>
<delete file="${jarfile}"></delete>
</target>
删除${dest.dir}指定的文件夹和${jarfile}指定的文件。
实际上<delete file="${jarfile}"></delete>这句不必要,因为生成的jar文件就在${dest.dir}文件夹中。