2012-05-08 36 views
3

長時間実行されるAntスクリプトでは、1秒に1回程度呼び出されるターゲットがあります。 (これはおそらく良いことではないかもしれませんが、それは今のところ受け入れましょう)
最後の実際の実行が少なくとも5分前だった場合にのみ実行します。Ant:タイムスタンプを比較するには?

解決策の1つのアイデアは、lastRunTimestampプロパティを維持し、現在の時刻をそれと比較することです。

問題: Antのタイムスタンプを比較するにはどうすればよいですか?

また、歓迎される別の解決策は、チェックが必要でないように、指定された時間間隔でのみターゲットを実行する手段です。

私はAnt 1.7.1とant-contribを使用しています。

アイデアは大変ありがとうございます - ありがとう!

答えて

2

興味深い質問と私が元々考えていたより少し答えにくい方。

あなたは5分古いのタイムスタンプを設定する<tstamp>タスクを使用することができます:あなたがそのタイムスタンプを持っている

<tstamp> 
    <format property="time_stamp" 
     offset="-5" 
     unit="minutes" 
     pattern="MM/dd/yyyy hh:mm:ss aa"/> 
</tstamp> 

たら、を使用することができますが、特定のかどうかを確認するために<condition>タスクの条件をLASTMODIFIEDファイルは以来更新されています。ファイルがない場合は、<touch>タスクを使用して作成することができます。

<condition property="has.been.modified"> 
    <islastmodified dateTime="${time_stamp}" mode="after"> 
     <file file="${touch.file}"/> 
    </islastmodified> 
</condition> 

唯一の問題は、デフォルトのプロパティが不変であることです。一度設定すると、変更することはできません。幸いなことに、ant-contribant-contribを使用すると、変数タスクを使用して変更することができます。

+0

すごくうまくいく!ただし、一時ファイルが必要です。おそらく、文字列として辞書的に比較できるよりも、 ' 'を使ってタイムスタンプを作成することはできますか?これにより、文字列を比較する問題が軽減されます。しかし、どのように考えても。 –

+0

これが見つかりました:http://stackoverflow.com/questions/7412894/ant-strings-comparisonこれは、あなたの答えと組み合わせて、良い解決策になります。 –

+0

'はAnt 1.8の機能です。 Ant 1.7では、タイムスタンプをファイルに書き込むなどの代替ソリューションを探す必要があります。 –