博客《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命令的结果如下图: