2012-12-17 40 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中讀取,因爲目錄名將超出頁面邊緣。