Любой способ параметризации, добавлять ли внутренние элементы в муравей? - PullRequest
2 голосов
/ 27 сентября 2011

Я пишу файл 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).

1 Ответ

2 голосов
/ 28 сентября 2011

Звучит как кандидат на задание Муравей presetdef .Руководство описывает задачу следующим образом:

Предустановленное определение генерирует новое определение на основе текущего определения с некоторыми предустановленными атрибутами или элементами.

Я не могу предоставитьпример для mxmlc, поскольку у меня нет Flex здесь.Но вот пример использования задачи exec:

<presetdef name="exec.preset">
    <exec executable="sh" dir=".">
        <arg value="-c" />
        <arg value="echo" />
    </exec>
</presetdef>

<exec.preset>
    <arg value="hello world" />
</exec.preset>

Если вы запустите это с помощью ant -verbose, вы увидите

exec.preset] Executing 'sh' with arguments:
[exec.preset] '-c'
[exec.preset] 'echo'
[exec.preset] 'hello world'
[exec.preset] 

Дополнительный аргумент, предоставленный в вызове по умолчанию:добавлен в exec.preset - это именно то, что вы хотите.

...