Сценарий сборки Ant - если проверка состояния с несколькими значениями - PullRequest
0 голосов
/ 24 января 2019

Мне нужно сравнить список связанных сред и выполнить операцию, если какая-либо из сред совпадает со средой переданного аргумента. Приведенный ниже код сравнивает каждое значение за раз. Я не хочу писать для каждой среды, так как мне нужно выполнить ту же операцию для группы envs.

Как я могу сравнить все среды (DEV1, DEV2, DEV3) вместе?

<if>
<equals arg1=“${env}” arg2="DEV" /> <!-- Need to compare with DEV1, DEV2, DEV3 -->
<then>
    <echo>Dev related env </echo> 
</then>
<elseif>
    <equals arg1="${env}" arg2=“TST” /> <!-- Need to compare with TST, E2E, UAT -->
    <then>
        <echo>Test related env </echo> 
    </then>
</elseif>

1 Ответ

0 голосов
/ 24 января 2019

Во-первых, я настоятельно рекомендую по возможности избегать использования 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.

  1. build зависит от обоихdevelopment и test, поэтому скрипт перейдет к ним и проверит их зависимости
  2. Они оба зависят от init, который не имеет зависимостей, поэтому скрипт продолжит работу init
  3. Свойство DEV имеет значение true, если свойство env имеет одно из 3 значений разработки, а также TST имеет значение true, если env имеет тестовое значение
  4. .скрипт возвращается к целям development и test, но запускается либо один, если его соответствующее условие истинно

Примечание: если ваше значение env следует предсказуемому шаблону (то есть DEV1- DEV70), вы можете использовать условие contains для упрощения вещей.

    <condition property="DEV">
        <contains string="${env}" substring="DEV" />
    </condition>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...