Ant 如何为变量赋值并重用它

Ant 如何为变量赋值并重用它,ant,Ant,我是Ant的新手,我有一个场景来分配我得到的当前时间[1],同时创建一个文件夹[2],并在文件中添加一些文件到文件夹[3]。因此,我需要得到我在[2]中得到的时间值。我基本上是一个java爱好者,如果它是在java中的话,只需几秒钟就可以拥有一个全局变量并重新使用它。但在这里,我不确定如何在不同的目标标记中全局重用该值。请分享你的想法 [1] [2] [3] :此处无法获得与上面[2]相同的current.time值 <target name="runTestResults">

我是Ant的新手,我有一个场景来分配我得到的当前时间[1],同时创建一个文件夹[2],并在文件中添加一些文件到文件夹[3]。因此,我需要得到我在[2]中得到的时间值。我基本上是一个java爱好者,如果它是在java中的话,只需几秒钟就可以拥有一个全局变量并重新使用它。但在这里,我不确定如何在不同的目标标记中全局重用该值。请分享你的想法

[1]


[2]


[3] :此处无法获得与上面[2]相同的current.time值

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

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

您能发布整个ant脚本吗?这可能与任务的执行顺序有关。也许runTestResults不依赖于init,所以从不调用
set.timestamp
宏?
<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>
<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>