我正在尝试为构建xml中的每个目标打印出本地时间戳。我有这个macrodef尝试解决每次打印的相同时间戳。
<macrodef name="timestamp.echo">
<attribute name="message"/>
<sequential>
<local name="current.time" />
<tstamp>
<format property="current.time" pattern="dd/MM/yyyy hh:mm:ss.SSS"/>
</tstamp>
<echo message="${current.time}@{message}" />
</sequential>
</macrodef>
并且此代码位于每个目标的末尾但在目标内 -
<timestamp.echo message="Mail sent" />
当我在本地任务上运行它时它工作得很好但是当我和Jenkins一起运行它失败了。我收到此错误消息 -
Problem: failed to create task or type local
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
我正在努力,因为我已经宣布了这个名字而无法看到问题的原因。任何帮助表示赞赏。
未来参考的答案
对于早期的Ant版本,我发现这将创建一个本地时间戳 -
<target name="timestamp">
<tstamp>
<format property="current.time" pattern="MM/dd/yyyy hh:mm:ss.SSS" />
</tstamp>
<echo message="${current.time} ${message}" />
</target>
然后将其插入目标将起作用 -
<antcall target="timestamp">
<param name="message" value="Completed" />
</antcall>
答案 0 :(得分:4)
在version 1.8中将<local>
任务添加到Ant中。将Ant升级到至少1.8或更高版本。
否则,您可能必须使用第三方Ant-Contrib的<var>
task来模拟作用域属性。