为什么这个macrodef会失败?

时间:2013-12-02 10:41:30

标签: ant build jenkins

我正在尝试为构建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>

1 个答案:

答案 0 :(得分:4)

version 1.8中将<local>任务添加到Ant中。将Ant升级到至少1.8或更高版本。

否则,您可能必须使用第三方Ant-Contrib的<var> task来模拟作用域属性。