Ant是一种基于Java的build工具,利用它对程序进行编译,执行,打包十分方便。通常java程序中会有读写文件的操作,如果java或者junit中的dir属性设置不当,会发现ant脚本只能在某些特定目录才能运行正常。
通常ant的build.xml都会定义src和build目录,如果程序中需要读写的文件也放在build目录,那么我们通常都会将java或junit中的dir属性设置成"${build}"。Java程序中读写文件的path也将已${build}作为相对路径。那么为何设置了dir属性可以解决这个问题呢?因为dir属性决定了java程序中user.dir的值,也就就是调用jvm的当前目录。详解请参见转帖java.io.File的绝对路径和相对路径这篇文章。这样ant的脚本在不同目录下都能顺利执行。下面简单的列举了java和junit这2个task的一般用法。
<java classname="test.Main"dir="${build}">
<arg value="-h"/>
<classpath>
<pathelement location="dist/test.jar"/>
<pathelement path="${java.class.path}"/>
</classpath>
</java>
<junit printsummary="yes" fork="yes" dir="${build}">
<formatter type="plain"/>
<testname="my.test.TestCase"/>
</junit>
dir:调用jvm的当前目录。如果fork属性是屏蔽的,那么忽略dir属性。
对于稍大的java project,ant脚本中往往会调用其他ant脚本,以及和CruiseControl集成,利用上述方法我们就可以避免程序只能在某些特定目录下执行。