我有一個常見的build.xml文件,其中包含大部分目標。 有兩個衛星構建文件可導入公共文件。衛星之間的區別在於一個運行共同目標一次,而另一個則有一個foreach ant-contrib任務,它循環通過子文件夾併爲每個子文件夾運行一次共同目標。Ant - 循環調用目標一次
我的公共文件中的一個目標提示用戶選擇要釋放到(dev或qa)的區域。 對於運行一次的衛星構建,這可以正常工作。 對於循環衛星版本,每個子文件夾都會向用戶顯示提示,但它們將全部進入同一發佈區域,因此我只需要提示一次該提示。
簡單的解決方案是將「選擇區域」目標移動到每個衛星構建文件,因此它只運行一次,即它位於循環之外。 我很想知道是否有更乾淨的方法來做到這一點。
我最初的想法是在循環衛星構建中(使用ant任務)調用循環外部的目標並設置一個屬性。然後,我會在通用構建文件中的「選擇區域」目標中添加一個「除非」屬性,該文件檢查螞蟻任務中設置的屬性是否已設置。 根據我的估算,這意味着非循環構建會運行選擇區域目標,因爲該屬性尚未設置(它會這樣做)。 循環衛星構建運行目標(使用螞蟻任務),但是當它循環到公共構建文件並命中選擇區域目標時,它仍然運行該目標,即使該屬性已設置且選擇區域目標具有除非屬性檢查它。
示例代碼如下:
提液共同打造
<target name="select-area" unless="area.selected" description="prompts user what area to deploy to and validates response">
<input message="Which area do you want to deploy to?" validargs="dev,qa" addproperty="deploy.to" />
...
</target>
循環衛星生成文件
<project name="run-build-file-multi" default="loop-brands">
<import file="../../../common/builds/newbuild.xml"/>
<ant antfile="${ant.file.common} target="select-area">
<property name="area.selected" value="yes" />
</ant>
<target name="loop-brands" depends="select-area" description="loops through each brand folder found in branch folder">
<foreach target="end-confirmation" param="current.brand" inheritall="true">
<path>
<dirset dir=".">
<include name="*"/>
</dirset>
</path>
</foreach>
</target>
</project>
它一旦螞蟻任務稱爲目標出現,area.selected屬性不再設置。
我不確定我是否正在以正確的方式進行討論,但希望它能夠比較清楚我所要達到的目標。
任何協助讚賞,謝謝。
謝謝Aaron,現在我明白了答案。完美的作品! – Neil