2013-10-23 50 views
0

我們有一個Java小程序的項目,我們生成使用Ant的包裝HTML,它看起來有點像這樣:參數多態的Ant腳本構建同一個文件的兩個版本

<target name="build-applet" description="Build web applet" depends="set-build-properties, set-properties"> 
    <antcall target="clean" /> 
    <antcall target="clean-applet" /> 
    <antcall target="set-version" /> 
    <antcall target="compile" /> 
    <antcall target="jar" /> 
    <antcall target="applet" /> 
</target> 

<target name="applet">  
    <replace file="${applet.dir}/${applet.html.file}">   
     <replacefilter token="@[email protected]" value="${applet.jar.file}"/> 
     <replacefilter token="@[email protected]" value="${applet.assets.file}"/> 
     <replacefilter token="@[email protected]" value="${applet.codebase}"/> 
</target> 

注意${applet.codebase}必須是URL小程序從例如mysite.com/game加載。它被設置在一個屬性文件中。

現在我希望能夠將這個小程序構建到兩個不同的位置,這是一個實時/測試設置的一部分。例如,可以通過mysite.com/game和mysite.com/test訪問其中的一個。我幾乎工作,除了${applet.codebase},因爲這需要在每種情況下不同。我以爲我可以有${applet.codebase}${applet.codebase_test}但我不知道如何做到這一點。也許有一種方法可以將標誌從build-applet傳遞到applet目標,並添加兩個頂級目標build-applet-livebuild-applet-test,這些目標只需與參數build-applet調用即可。

回答

1

爲什麼不簡單ant -Dapplet.codebase=whatever build.xml,意味着將$ {applet_codebase}設置爲userproperty(=通過-Dkey = value設置的那些屬性)?

+0

因爲ant腳本和關聯的屬性文件是我們的Eclipse項目的一部分......除非我誤解了你的解決方案意味着將命令行變量傳遞給ant? –

+1

是的,也可以用Eclipse Run As> Ant Build ...第二項 – Rebse

+0

另一個稍微相關的重構:將antcalls更改爲clean,clean-applet,set-version,compile和jar到依賴列表中的構建小程序。讓螞蟻爲你管理依賴關係圖要乾淨得多。我也完全同意小程序應該消失,轉而將param傳遞給ant,或者至少應該是一個宏 – thekbb