Во-первых, я настоятельно рекомендую по возможности избегать использования ant-contrib (сторонней библиотеки, которая предоставляет блоки if / else, для циклов и т. Д.).Такого рода вещи лучше всего делать, используя условия и зависимости целевого уровня, характерные для Ant.Вот пример того, как это можно сделать.
<target name="build" depends="development,test" />
<target name="init">
<condition property="DEV">
<or>
<equals arg1="${env}" arg2="DEV1" />
<equals arg1="${env}" arg2="DEV2" />
<equals arg1="${env}" arg2="DEV3" />
</or>
</condition>
<condition property="TST">
<or>
<equals arg1="${env}" arg2="TST" />
<equals arg1="${env}" arg2="E2E" />
<equals arg1="${env}" arg2="UAT" />
</or>
</condition>
</target>
<target name="development" depends="init" if="DEV">
<echo message="Dev related env" />
</target>
<target name="test" depends="init" if="TST">
<echo message="Dev related env" />
</target>
С помощью приведенного выше сценария сборки пользователь просто вызывает цель build
.
build
зависит от обоихdevelopment
и test
, поэтому скрипт перейдет к ним и проверит их зависимости - Они оба зависят от
init
, который не имеет зависимостей, поэтому скрипт продолжит работу init
- Свойство
DEV
имеет значение true, если свойство env
имеет одно из 3 значений разработки, а также TST
имеет значение true, если env
имеет тестовое значение - .скрипт возвращается к целям
development
и test
, но запускается либо один, если его соответствующее условие истинно
Примечание: если ваше значение env
следует предсказуемому шаблону (то есть DEV1- DEV70), вы можете использовать условие contains
для упрощения вещей.
<condition property="DEV">
<contains string="${env}" substring="DEV" />
</condition>