3

私はAntを初めて使用します。取得した現在の時刻を割り当てるシナリオがあります[1]。フォルダーを作成しながら[2]、ファイルを下に移動して、フォルダーにファイルを追加します[3]。そこで、[2] で取得した時間の値を取得する必要があります。私は基本的にJavaの男です.Javaの場合、1つのグローバル変数を持ってそれを再利用するのは数秒の仕事でした. しかし、ここでは、異なるターゲット タグで値をグローバルに再利用する方法がわかりません。これについてあなたの考えを教えてください。

[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 に答える