Las propiedades dadas son inmutables en la hormiga que necesitas para hacer algo un poco funky, de lo contrario acabas de registrar la misma marca de tiempo una y otra vez.
El uso de antcall le da una nueva sesión, lo que significa que puede reutilizar la propiedad, aunque es un poco torpe.
<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>
Si está utilizando Ant 1.8 a continuación, se puede utilizar local, que es mucho más limpio
<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>
Y aquí es cómo se puede usar
<target name="testTsEcho" depends="init" description="blah">
<timestamp.echo message="test" />
<sleep seconds="10" />
<timestamp.echo message="test2" />
</target>
Esto almacenará la marca de tiempo en una propiedad, por lo que todos los mensajes compartirán el mismo tiempo. Bueno en algunos casos, pero inútil para, p. ver qué parte de una construcción lleva demasiado tiempo.Como el OP menciona "una marca de tiempo para cada mensaje", en realidad no creo que esta sea una respuesta correcta a la pregunta intencionada. –
No estoy tan seguro de ese Rasmus. Si llama repetidamente a la macro de marca de tiempo configurada e inmediatamente después de que se vacíe la hora, debería volcarla apropiadamente. – corsiKa