2012-12-17 88 views
3

我是新来的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

你可以发布你的整个蚂蚁脚本?这可能与您的任务执行顺序有关。也许runTestResults不依赖于init,所以'set.timestamp'宏从不被调用? – David

回答

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