web-dev-qa-db-fra.com

Utiliser Ant pour implémenter la condition if else (vérifier la saisie en ligne de commande)

Je suis un débutant à Ant. Mon script ant reçoit une variable d'entrée utilisateur nommée "env" de la ligne de commande:

par exemple. ant doIt -Denv=test

La valeur entrée par l'utilisateur peut être "test", "dev" ou "prod". 

J'ai aussi la cible "doIt":

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

Dans ma cible, j'aimerais créer la condition sinon suivante pour mon script ant:

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

C’est pour vérifier la valeur entrée par l’utilisateur à partir de la ligne de commande, puis imprimer un message en conséquence. 

Je sais avec ant-Contrib, je peux écrire un script ant avec <if> <else>. Mais pour mon projet, je voudrais utiliser Ant pur pour implémenter la condition sinon. Probablement, je devrais utiliser <condition> ?? Mais je ne sais pas comment utiliser <condition> pour ma logique. Quelqu'un peut-il m'aider, s'il vous plaît?

15
john123

Vous pouvez créer quelques cibles et utiliser les balises 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>

Les cibles avec le préfixe - sont privées, ainsi l'utilisateur ne pourra pas les exécuter depuis la ligne de commande.

42
pepuch

Si vous avez besoin d'une condition if/else simple (sans elseif); puis utilisez le ci-dessous:

Ici, je suis dépendant d'une variable env DMAPM_BUILD_VER, mais il peut arriver que cette variable ne soit pas définie dans env. Il me faut donc un mécanisme permettant de définir par défaut une valeur locale.

    <!-- 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>
1
Arun