我是Ant的新手,我有一个方案来分配我有[1]的当前时间,同时创建一个文件夹[2]并在文件中我将一些文件添加到文件夹[3]。所以我需要得到我在[2]中得到的时间值。我基本上是一个java家伙,如果是在java中,那么有一个全局变量并重新使用它的几秒钟工作。但在这里我不确定如何在不同的目标标签中全局重用该值。请分享你的想法。
[1]
<macrodef name="set.timestamp">
<sequential>
<tstamp>
<format property="current.time" pattern="MM-dd-yyyy_hh-mm-ss"/>
</tstamp>
</sequential>
</macrodef>
[2]
<target name="init" depends="setRuntimeArchive">
<set.timestamp/>
<mkdir dir="${results}/${classname}_${current.time}/xml" />
<mkdir dir="${results}/${classname}_${current.time}/html" />
<mkdir dir="${junit-report-output}" />
</target>
[3]:在这里,我无法获得与上面相同的current.time值[2]
<target name="runTestResults">
<copy
file="${eclipse-home}/${report}.xml"
tofile="${results}/${classname}_${current.time}/xml/${report}_${platform}.xml"
failonerror="false" />
<xslt
style="${etf-home}/plugins/${org.eclipse.test}/JUNIT.XSL"
basedir="${results}/${classname}_${current.time}/xml"
destdir="${results}/${classname}_${current.time}/html" />
<antcall target="runTestStatus" />
</target>
答案 0 :(得分:4)
在Ant中,任何不在目标中的任务都会在任何目标之前执行。因此,您所要做的就是在任何目标之外设置您的属性current.time
,并且该属性可用于所有目标:
<project name="foo" default="some.task" basedir=".">
<tstamp>
<format property="current.time"
pattern="MM-dd-yyyy_hh-mm-ss"/>
</tstamp>
<target name="run.test.status"
depends="run.test.results">
...
</target>
<target name="run.test.results">
<property name="results.dir"
value="${results/${classname_$current.time}/xml"/>
<mkdir dir="${results.dir}"/>
<copy
file="${eclipse-home}/${report}.xml"
tofile="${results.dir}/${report}_${platform}.xml"
failonerror="false" />
<xslt
style="${etf-home}/plugins/${org.eclipse.test}/JUNIT.XSL"
basedir="${results}/${classname}_${current.time}/xml"
destdir="${results}/${classname}_${current.time}/html" />
</target>
在上面,首次执行此build.xml
时会设置时间戳,因为它不在任何目标中。现在,时间戳可用于所有目标。
顺便说一句,我设置属性${results.dir}
以便在StackOverflow中更容易阅读,因为目录名称会超出页面边缘。