如何为变量赋值并重用它

时间:2012-12-17 13:03:13

标签: ant

我是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>

1 个答案:

答案 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中更容易阅读,因为目录名称会超出页面边缘。