博客《Ant—使用Ant构建简单Java项目(一)》演示了使用Ant工具构建简单的Java项目,接着这个例子来进一步学习Ant:
上面例子需要执行多条ant命令才能运行Test类中的main函数,能不能简化需要执行命令呢?答案是肯定的,可以将build.xml文件中的脚本改成下面的脚本:
<?xml version="1.0" encoding="UTF-8"?>
<project name="test" default="run-Test" basedir=".">
<property name="src" value="src"/>
<property name="lib" value="build/lib"/>
<property name="dest" value="build/classes"/>
<property name="np_jar" value="build/lib/test.jar"/>
<target name="create-path">
<mkdir dir="${dest}"/>
<mkdir dir="${lib}"/>
</target>
<target name="create-class" depends="create-path">
<javac srcdir="${src}" destdir="${dest}"/>
</target>
<target name="create-jar" depends="create-class">
<jar destfile="${np_jar}" basedir="${dest}">
<manifest>
<attribute name="Main-Class" value="Test"/>
</manifest>
</jar>
</target>
<target name="run-Test" depends="create-jar">
<java classname="Test" classpath="${np_jar}"/>
</target>
<target name="clean">
<delete file="${np_jar}"/>
<delete dir="${dest}"/>
<delete dir="${lib}"/>
</target>
</project>
这时只需执行ant命令就可以操作完成需要依次执行“ant create-path”、“ant create-class”、“ant create-jar” 和“ant run-Test”命令才能完成的操作,那么它是怎样做到的呢?
a、由于project标签default属性定义的值为run-Test,所以当直接执行ant命令时ant会首先执行name为run-Test的target;
b、由于name为run-Test的target中的depends属性指向name为create-jar的target,所以会先执行name为create-jar的target;
c、由于name为create-jar的target中的depends属性指向name为create-class的target,所以会先执行name为create-class的target;
d、由于name为create-class的target中的depends属性指向name为create-path的target,所以会先执行name为create-path的target;
e、由于name为create-path的target没有depends属性,所以ant命令最终先执行该target。
由此可见,此时单独执行ant命令其实就是依次执行了“ant create-path”、“ant create-class”、“ant create-jar” 和“ant run-Test”命令。
DOS窗口单独执行ant命令的结果如下图: