2011-09-27 44 views
2

我正在編寫一個用於編譯flex項目的ant文件(但這個問題也可能適用於非flex的ant腳本)。任何參數化方式是否要在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調用之間不同的其他內部元素?內置if螞蟻的機制並沒有幫助我在這裏 - 我不能在一個mxmlc元素的中間調用一個目標....

任何想法? (我知道ant-contrib有某種機制,寧願有一個純粹的ant解決方案,甚至不確定ant-contrib是否會在這裏起作用)。

回答

2

這聽起來像是一個螞蟻的候選人presetdef task。本手冊描述如下任務:

預設定義根據當前定義生成一個新的定義,其中包含一些屬性或元素預設。

我不能提供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] 

在預設的電話所提供的額外ARG被添加到exec.preset - 這正是你想要的。

+0

謝謝!這真的很有幫助! – yonix

相關問題