Ant:macrodef中的条件执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ant:macrodef中的条件执行相关的知识,希望对你有一定的参考价值。

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

<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.
答案

不需要antcontrib,使用ant> = 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 <= 1.9.1时,如果你想避免使用像antcontrib这样的ant插件,可以使用内置javascript引擎的script task

以上是关于Ant:macrodef中的条件执行的主要内容,如果未能解决你的问题,请参考以下文章

4.3 合并重复的条件执行片段

NDK: ant 错误 [javah] Exception in thread "main" java.lang.NullPointerException 多种解决办法(代码片段

兼容ie8,firefox,chrome浏览器的代码片段

自动刷新android片段,直到满足条件

如何根据ANT中的条件设置属性值?

ANT 场景条件依赖目标