Ant:macrodef中的条件执行

时间:2014-07-16 14:56:59

标签: actionscript-3 ant

我已经创建了一个宏来从.swf来源(Flash项目)编译.as

<macrodef name="compile">
  <sequential>
    <mxmlc file="@{input}" output="@{output}"/>
  </sequential>
</macrodef>

创建后,我会在build.xml

中调用它
<target name="compile.app1">
  <compile input="App1.as" output="app1.swf"/>
</target>

为避免每次都编译App1,我已在<uptodate>中添加了<compile>任务:

<macrodef name="compile">
  <sequential>
    <uptodate property="swf.uptodate" targetfile="@{output}">
      <srcfiles dir="@{src}" includes="**/*.as"/>
    </uptodate>
    <mxmlc file="@{input}" output="@{output}"/>
  </sequential>
</macrodef>

但是在这一点上,我不知道如何将swf.uptodate属性与mxmlc任务绑定。这就是我想做的事情:

IF NOT swf.uptodate
  EXECUTE mxmlc
ELSE
  do nothing.

1 个答案:

答案 0 :(得分:2)

不需要antcontrib,使用ant&gt; = 1.9.1使用the new if/unless feature introduced with Ant 1.9.1(因为Ant 1.9.1 see this answer for details中的错误,最好使用Ant 1.9.3) 要激活该功能,您需要命名空间声明,如以下代码段所示:

<project 
  xmlns:if="ant:if"
  xmlns:unless="ant:unless"
>
<macrodef name="compile">
  <sequential>
    <uptodate property="swf.uptodate" targetfile="@{output}">
      <srcfiles dir="@{src}" includes="**/*.as"/>
    </uptodate>
    <mxmlc file="@{input}" output="@{output}" unless:true="${swf.uptodate}"/>/>
  </sequential>
</macrodef>
</project>

否则,当使用ant&lt; = 1.9.1时,如果你想避免使用像antcontrib这样的ant插件,你可以将script task与内置的javascript引擎一起使用。