在ANT中我有一个包含这些目标的构建文件:
INIT <-- CLEAN <-- COMPILE <-- TEST
我希望通过从以前的版本中删除不必要的文件来保持构建环境的清洁 问题是在测试阶段我想检查测试源是否与测试类一致,所以我不运行测试。要检查我是否需要将最后的构建类与源文件进行比较,如下所示:
<uptodate property="tests.unnecessary">
<srcfiles dir="src" includes="**/*.java"/>
<mapper type="glob" from="*.java" to="${build.dir}/classes/*.classes"/>
</uptodate>
所以我想检查是否有必要进行测试并且:
- 如果是,请清理课程并重新进行编译和测试;
- 如果不是,请不要做任何事情。
我该怎么做?
答案 0 :(得分:4)
uptodate
task的示例很接近 - 您可能需要调整映射器并注意绝对路径和相对路径。也许:
<uptodate property="tests.unnecessary">
<srcfiles dir="src" includes="**/*.java"/>
<mapper type="glob" from="*.java" to="../${build.dir}/classes/*.class"/>
</uptodate>
请注意映射器..
属性中的to=
- 可能build.dir
与src
在目录层次结构中处于同一级别。另请注意,编译的类具有扩展名.class
而不是“.classes”。
运行上述内容后,您可以使用Ant targets的if/unless
属性来控制执行。有许多方法,最基本的可能是如下所示。运行ant test
时,Ant将确定是否有任何文件已过期,如果没有,则跳过clean,compile和test。另一种方法可能是使用antcall
task从单个目标中调用一系列目标调用。
<target name="check" depends="init">
<uptodate property="tests.unnecessary">
<srcfiles dir="src" includes="**/*.java"/>
<mapper type="glob" from="*.java" to="${build.dir}/classes/*.class"/>
</uptodate>
</target>
<target name="init">
<echo message="Running init" />
</target>
<target name="clean" depends="check" unless="tests.unnecessary">
<echo message="Running clean" />
</target>
<target name="compile" depends="clean" unless="tests.unnecessary">
<echo message="Running compile" />
</target>
<target name="test" depends="compile" unless="tests.unnecessary">
<echo message="Running test" />
</target>