0

「ant でタイムスタンプを出力する」という名前のトピックの 1 つで、同じ Ant スクリプトで複数の時間を表示するために説明した 2 つの方法をテストしました。

しかし、この2つの解決策は私にはうまくいきません.Antは常に同じ日付/時刻を与えてくれます.

誰でも理由を説明できますか?

私は解決策を見つけました(しかし、私の心には非常に完璧であることに注意してください):

<tstamp>
    <format property="date.etape1" pattern="dd/MM/yyyy HH:mm:ss" />
</tstamp>
<echo message="${date.etape1} bla bla bla...." />
<tstamp>
    <format property="date.etape2" pattern="dd/MM/yyyy HH:mm:ss" />
</tstamp>
<echo message="${date.etape2} bla bla bla...." />

トピック「アリのタイムスタンプを出力する」の2つのソリューションの1つを機能させる方法を誰かが説明してくれれば、私はとても幸せです!!!

4

4 に答える 4

1

TSTAMPのソースによると、動作するはずです(ソースはこちら)。Dateオブジェクトは常にインスタンス化されます。たぶん、表面の後ろで起こっているいくつかの奇妙なタスクのリサイクルがありますか?

このAntビルドファイルを試しています

<project name="testTStamp" default="xxx" basedir=".">
    <target name="testMe"> 
        <MyTimestamp> </MyTimestamp> 
        <sleep seconds="5"> </sleep> 
        <MyTimestamp> </MyTimestamp> 
    </target> 

    <macrodef name="MyTimestamp"> 
        <sequential > 
            <tstamp> 
                <format property="current.time" pattern="MM/dd/yyyy hh:mm:ss aa"/> 
            </tstamp> 
            <echo message="RUN_TIME: ${current.time}"/> 
        </sequential> 
    </macrodef>

    <target name="default"> 
        <tstamp> 
            <format property="current.time_one" pattern="MM/dd/yyyy hh:mm:ss.SSS aa"/> 
        </tstamp> 
        <echo message="RUN_TIME: ${current.time_one}"/> 
        <sleep seconds="5"> </sleep> 
        <tstamp> 
            <format property="current.time_two" pattern="MM/dd/yyyy hh:mm:ss.SSS aa"/> 
        </tstamp> 
        <echo message="RUN_TIME: ${current.time_two}"/> 
    </target> 

    <target name='xxx' depends='default, testMe' />
</project>

さて、デフォルトのターゲットで、formatプロパティの名前を変更すると、機能します。そのため、背後にいくつかのキャッシングマジックがあります。

于 2012-04-17T09:41:15.627 に答える
0

Ant ではプロパティは不変です。それらは変数ではありません。

ただし、タスクを使用することで、目的を達成できる可能性があり<local>ます。このタスクにより、target(またはsequential、またはその他のブロック) で後で設定されたプロパティが、ローカルでのみ指定されるようになります。

したがって、すべてのタイムスタンプ エコーが別々のターゲットにある場合は、機能します。1 つのターゲット内では、「time_start」、「time_end」などの複数のプロパティを使用する必要があります。

于 2012-07-09T16:26:48.487 に答える
0

このスレッドのフォローアップで、マクロ定義が呼び出されるたびにインスタンス化し続けるため、キャッシングの問題がないため、マクロ定義がより適切な方法であると読みました。私は彼らの例を単純化しました。ファイル全体を含めたので、以下のコードを clock.xml として保存し、ant から直接実行できます。

<project name="marktime" basedir=".">
<description>
    logstamp is a simple macrodef for ANT to echo a time stamp out to an open log.
    It is not written to pass back the current time, just simple echo to stdout.
            You are welcome to add which file to output the results to, add blurbs to messages.

</description>

<macrodef name="logstamp">
  <sequential>
  <local name="logtime"/>
  <tstamp>
    <format property="logtime" pattern="yyyy.MM.dd : HH:mm:ss z"/>
  </tstamp>
  <echo  message=" ### Current time now: ${logtime}"/>
  </sequential>
</macrodef>

<target
name="init"
description="boilerplate for all targets">
    <!-- Just run the Macrodef -->
<logstamp/>
<sleep seconds="5"> </sleep> 
<logstamp/>
<sleep seconds="5"> </sleep> 
<logstamp/>
<sleep seconds="5"> </sleep> 
<logstamp/>
<sleep seconds="5"> </sleep> 
<logstamp/>
</target>
</project>

結果は次のとおりです。

C:\desktop\>ant -f clock.xml init
Buildfile: C:\desktop\clock.xml

init:
     [echo]  ### Current time now: 2014.02.14 : 16:41:06 PST
     [echo]  ### Current time now: 2014.02.14 : 16:41:11 PST
     [echo]  ### Current time now: 2014.02.14 : 16:41:16 PST
     [echo]  ### Current time now: 2014.02.14 : 16:41:21 PST
     [echo]  ### Current time now: 2014.02.14 : 16:41:26 PST

BUILD SUCCESSFUL
Total time: 20 seconds
于 2014-02-15T00:36:06.663 に答える
0

Bee Kay の回答に基づいて、このマクロは 'local' の使用を避け、代わりに 'macrodef' で 'attribute' を使用することにより、ANT バージョン 1.7 で動作します。

<project name="echotime" basedir="." default="echotime">
<description>
echotime is a simple macrodef for ANT to echo a time stamp to an open log.
It is not written to pass back the current time, just simple echo to stdout.
</description>

<macrodef name="echotime">
    <attribute name="logtime" default="" />
    <sequential>
        <tstamp>
            <format property="logtime" pattern="yyyy.MM.dd HH:mm:ss z" />
        </tstamp>
        <echo message="Build finished at ${logtime}" />
    </sequential>
</macrodef>

<target name="echotime">
    <echo message="${ant.version}" />
    <echotime />
</target>

結果は次のとおりです。

>ant -buildfile echotime.xml
Buildfile: echotime.xml

echotime:
     [echo] Apache Ant version 1.7.1 compiled on June 27 2008
     [echo] Build finished at 2019.12.19 11:43:29 EST

BUILD SUCCESSFUL
Total time: 0 seconds
于 2019-12-19T16:50:44.300 に答える