Я пишу файл ant для компиляции проекта flex (но этот вопрос может относиться и к не-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>
Я хотел избежать дублирования общих атрибутов mxmlc и внутреннего элемента с помощью задачи <antcall>
ant, поэтому я придумал что-то вроде этого:
<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?Встроенный механизм муравья if
мне здесь не помогает - я не могу вызвать цель в середине элемента mxmlc ....
Есть идеи?(Я знаю, что у ant-contrib есть какой-то механизм if. Скорее, у него будет чисто муравейное решение, и я даже не уверен, поможет ли здесь ant-contrib if).