paralel olarak çalıştırıldığında, <foreach>
<parallel>
görevi kullanır, ancak "failonany" özelliğini ayarlayın veya herhangi yineleme başarısız olursa görev başarısız gerektiğini söylemek herhangi bir şekilde vermez çünkü oluşur.
Neyse ki, yerine <for>
kullanmak için nispeten kolay bir çözüm vardır. Örnekte, bu şekilde görünecektir: Açıkça sonra ${foreach.dir}
olarak exex-subant hedefin erişilebilir olacaktır foreach.dir özelliği, geçmek zorunda
<target name="build">
<for param="foreach.dir" parallel="true" list="1,2,3">
<sequential>
<antcall target="exex-subant" inheritall="true">
<param name="target" value="build" />
<param name="foreach.dir" value="@{foreach.dir}" />
</antcall>
</sequential>
</for>
</target>
Not.
Bu, tüm yinelemeleri paralel olarak yürütür, ancak bunlardan herhangi biri başarısız olursa komut başarısız olur (görev için herhangi bir şeyi yürütmez). for
görevi kullanmak için, sen 1.6 karınca veya daha yüksek gerekir ve sizin taskdef değiştirmeniz gerekecektir
Not:
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="../lib/ant/ant-contrib-1.0b3.jar" />
</classpath>
</taskdef>
bir nedenle eski sürümlerini desteklemek için gerekirse
karınca, daha sonra exex-subant hedefini biraz değiştirmelisiniz, böylece başarısız olduğunda bir şey değişti. Örneğin, exex-subant içinde mevcut mantığı bir try/catch içinde sarabilirsiniz ve catch bloğunda bir dosya yaratabilirsiniz. Daha sonra foreach sona erdikten sonra, dosyanın var olup olmadığını kontrol edebilir ve eğer yapmazsa yapıyı kaybedebilirsiniz. Bu şekilde, eğer foreach'ın herhangi bir icraatı başarısız olursa, karınca betiği foreach bitiminden sonra başarısız olur.
Bu özellik, exex-subant'ta bir özelliği yalnızca başarısızlık durumunda ayarlayamayacağınızı unutmayın, çünkü özellik foreach döngüsüne geri dönmeyecektir (bu yüzden bir dosya oluşturmayı önerdim). Ama sadece for
görevini kullanmanızı ve 1.6 veya daha yüksek bir anten gerektirmeyi şiddetle tavsiye ediyorum.
teşekkürler ... işe yaradı! – Clintm