Dato che le proprietà sono immutabili nella formica, è necessario fare qualcosa di un po 'strano qui altrimenti si finisce semplicemente per registrare lo stesso timestamp più e più volte.
L'uso di antcall ti offre una nuova sessione che significa che puoi riutilizzare la proprietà, anche se è un po 'maldestra.
<macrodef name="timestamp.echo">
<attribute name="message"/>
<sequential>
<antcall target="_timestamp.echo">
<param name="message" value="@{message}" />
</antcall>
</sequential>
</macrodef>
<target name="_timestamp.echo">
<tstamp>
<format property="current.time" pattern="dd/MM/yyyy hh:mm:ss"/>
</tstamp>
<echo message="${current.time} ${message}"/>
</target>
Se si utilizza Ant 1.8 quindi è possibile utilizzare locale che è molto più pulito
<macrodef name="timestamp.echo">
<attribute name="message"/>
<sequential>
<local name="current.time" />
<tstamp>
<format property="current.time" pattern="dd/MM/yyyy hh:mm:ss"/>
</tstamp>
<echo message="${current.time} @{message}" />
</sequential>
</macrodef>
Ed ecco come si può utilizzare
<target name="testTsEcho" depends="init" description="blah">
<timestamp.echo message="test" />
<sleep seconds="10" />
<timestamp.echo message="test2" />
</target>
fonte
2010-06-04 08:34:52
Questo memorizzerà il timestamp in una proprietà, quindi tutti i messaggi condivideranno la stessa ora. Buono in alcuni casi, ma inutile per es. vedere quale parte di una build impiega troppo tempo.Dato che l'OP cita "un timestamp per ogni messaggio", in realtà non penso che questa sia una risposta corretta alla domanda di interesse. –
Non sono così sicuro di quel Rasmus. Se si richiama ripetutamente la macro data/ora impostata e immediatamente dopo tale operazione, è necessario scaricarla in modo appropriato. – corsiKa