我正在编写一个用于编译 flex 项目的 ant 文件(但这个问题也可能适用于非 flex ant 脚本)。
我在那里有几个目标,如下所示:
<target name="first">
<mxmlc file="${src.dir}/FirstClass.as" output="${output.dir}/First.swf" ...identical_compiler_attributes...>
...identical_compiler_inner_elements...
<compiler.define name="AN_ATTRIBUTE" value="A_VALUE" />
</mxmlc>
</target>
<target name="second">
<mxmlc file="${src.dir}/SecondClass.as" output="${output.dir}/Second.swf" ...identical_compiler_attributes...>
...identical_compiler_inner_elements...
<!-- no additional compiler.define calls needed -->
</mxmlc>
</target>
我想通过使用<antcall>
ant 任务来避免常见的 mxmlc 属性和内部元素的重复,所以我想出了这样的东西:
<target name="first">
<antcall target="helper_target">
<param name="src.file" value="FirstClass.as"/>
<param name="output.file" value="First.swf"/>
</antcall>
</target>
<target name="second">
<antcall target="helper_target">
<param name="src.file" value="SecondClass.as"/>
<param name="output.file" value="Second.swf"/>
</antcall>
</target>
<target name="helper_target">
<mxmlc file="${src.dir}/${src.file}" output="${output.dir}/${output.file}" ...identical_compiler_attributes...>
...identical_compiler_inner_elements...
<!-- WHAT DO I DO ABOUT THE compiler.define?? -->
</mxmlc>
</target>
这很好地解决了大多数重复问题。<compiler.define>
但是对于 mxmlc 调用之间不同的其他内部元素,我该怎么办?ant的内置if
机制在这里对我没有帮助 - 我无法在 mxmlc 元素中间调用目标....
有任何想法吗?(我知道 ant-contrib 有某种 if 机制。宁愿有一个纯蚂蚁解决方案,甚至不确定 ant-contrib 的 if 是否会在这里有所帮助)。