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