Можно создать $i
внешняя сторона цикл и сделать $i++
у основания цикла.
Вы можете определить макрос Ant для установки текущей метки времени, а затем вызывать макроопределение каждый раз, когда вам нужно ссылаться на него во всем файле build.xml
Следующий macrodef установит метку времени на property (вы можете добавить атрибут в macrodef, если хотите настроить свойство, которое он устанавливает):
<macrodef name="set.timestamp">
<sequential>
<tstamp>
<format property="current.time" pattern="MM/dd/yyyy hh:mm"/>
</tstamp>
</sequential>
</macrodef>
Затем, чтобы использовать его, просто откройте свойство, установленное macrodef, как вам нужно:
<target name="doFoo" depends="dir.check" if="dir.exists">
<set.timestamp/>
<!--in this example, just echo the timestamp -->
<echo message="${current.time}"/>
</target>
Для получения дополнительной информации о ant macrodefs см. документацию .
Учитывая, что свойства в ant неизменяемы, вам нужно сделать что-то немного странное, иначе вы просто будете регистрировать одну и ту же временную метку снова и снова.
Использование antcall дает вам свежую сессию, что означает, что вы можете повторно использовать свойство, хотя это немного неуклюже.
<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>
Если вы используете Ant 1.8, вы можете использовать local, который намного чище
<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>
И вот как вы можете его использовать
<target name="testTsEcho" depends="init" description="blah">
<timestamp.echo message="test" />
<sleep seconds="10" />
<timestamp.echo message="test2" />
</target>