14

私はAntの初心者です。私のantスクリプトは、コマンドラインから「 env 」という名前のユーザー入力変数を受け取ります。

例えばant doIt -Denv=test

ユーザー入力値は、「test」、「dev」、または「prod」のいずれかです。

doIt「 」ターゲットもあります。

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

私のターゲットでは、antスクリプトのifelse条件を次のように作成したいと思います。

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スクリプトを書くことができます<if> <else>しかし、私のプロジェクトでは、純粋なAntを使用してifelse条件を実装したいと思います。おそらく、私は使用する必要があります<condition>か?<condition>しかし、ロジックの使い方がわかりません。誰か助けてくれませんか?

4

2 に答える 2

43

いくつかのターゲットを作成して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>

プレフィックス付きのターゲット-はプライベートであるため、ユーザーはコマンド ラインから実行できません。

于 2013-03-13T16:10:06.497 に答える
1

単純なif/else条件 (elseif なし)が必要な場合。次に、以下を使用します。

ここでは環境変数 DMAPM_BUILD_VER に依存していますが、この変数が環境変数に設定されていないことがあります。したがって、ローカル値をデフォルトにするメカニズムが必要です。

    <!-- 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>
于 2015-04-21T08:46:36.700 に答える