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]:在这里我无法获得与上面 [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>
4

1 回答 1

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

于 2012-12-17T15:14:11.530 回答