Подтвердить что ты не робот

Используйте pure Ant для реализации if else condition (проверьте ввод командной строки)

Я новичок в Ant. Мой ant script получает из командной строки пользовательскую входную переменную с именем " env":

например. ant doIt -Denv=test

Пользовательское значение ввода может быть "test", "dev" или "prod".

У меня также есть цель "doIt":

<target name="doIt">
  //What to do here?
</target>

В моей цели я хотел бы создать следующее условие if else для моего ant script:

if(env == "test")
  echo "test"
else if(env == "prod")
  echo "prod"
else if(env == "dev")
  echo "dev"
else
  echo "You have to input env"

Чтобы проверить, какое значение пользователь ввел из командной строки, затем напечатайте сообщение соответствующим образом.

Я знаю с ant -Contrib, я могу написать ant script с помощью <if> <else>. Но для моего проекта, я бы хотел использовать pure ant для реализации условия if else. Наверное, я должен использовать <condition>?? Но я не уверен, как использовать <condition> для моей логики. Может кто-нибудь мне помочь?

4b9b3361

Ответ 1

Вы можете создать несколько целей и использовать теги if/unless.

<project name="if.test" default="doIt">

    <target name="doIt" depends="-doIt.init, -test, -prod, -dev, -else"></target>

    <target name="-doIt.init">
        <condition property="do.test">
            <equals arg1="${env}" arg2="test" />
        </condition>
        <condition property="do.prod">
            <equals arg1="${env}" arg2="prod" />
        </condition>
        <condition property="do.dev">
            <equals arg1="${env}" arg2="dev" />
        </condition>
        <condition property="do.else">
            <not>
                <or>
                <equals arg1="${env}" arg2="test" />
                <equals arg1="${env}" arg2="prod" />
                <equals arg1="${env}" arg2="dev" />
                </or>
            </not>
        </condition>
    </target>

    <target name="-test" if="do.test">
        <echo>this target will be called only when property $${do.test} is set</echo>
    </target>

    <target name="-prod" if="do.prod">
        <echo>this target will be called only when property $${do.prod} is set</echo>
    </target>

    <target name="-dev" if="do.dev">
        <echo>this target will be called only when property $${do.dev} is set</echo>
    </target>

    <target name="-else" if="do.else">
        <echo>this target will be called only when property $${env} does not equal test/prod/dev</echo>
    </target>

</project>

Цели с префиксом - являются закрытыми, поэтому пользователь не сможет их запустить из командной строки.

Ответ 2

Если для любого из вас требуется простое условие if/else (без elseif); затем используйте следующее:

Здесь я зависим от переменной env DMAPM_BUILD_VER, но может случиться, что эта переменная не установлена ​​в env. Поэтому мне нужно, чтобы механизм по умолчанию имел локальное значение.

    <!-- Read build.version value from env variable DMAPM_BUILD_VER. If it is not set, take default.build.version. -->
    <property name="default.build.version" value="0.1.0.0" />
    <condition property="build.version" value="${env.DMAPM_BUILD_VER}" else="${default.build.version}">
        <isset property="env.DMAPM_BUILD_VER"/>
    </condition>