Podane właściwości są niezmienne w mrówce, musisz zrobić coś nieco funky tutaj inaczej po prostu skończy się rejestrowanie tego samego znacznika czasu ponownie.
Używanie antcall daje ci nową sesję, co oznacza, że możesz ponownie wykorzystać nieruchomość, chociaż jest trochę niezgrabna.
<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>
Jeśli używasz Ant 1.8, można korzystać z lokalnej, która jest znacznie czystsze
<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>
A oto w jaki sposób można go używać
<target name="testTsEcho" depends="init" description="blah">
<timestamp.echo message="test" />
<sleep seconds="10" />
<timestamp.echo message="test2" />
</target>
Spowoduje to zapisanie znacznika czasu w usłudze, dzięki czemu wszystkie wiadomości zostaną udostępnione w tym samym czasie. Dobry w niektórych przypadkach, ale bezużyteczny dla np. sprawdzanie, która część kompilacji trwa zbyt długo.Ponieważ PO wspomina o "sygnaturze czasowej każdej wiadomości", nie sądzę, że jest to poprawna odpowiedź na pytanie intendenta. –
Nie jestem taki pewien o tym Rasmus. Jeśli wielokrotnie wywołujesz ustawione makro znacznika czasu i zaraz po tym czasie zrzucisz czas, powinien on go odpowiednio zrzucić. – corsiKa