【问题标题】:Use pure Ant to implement if else condition (check command line input)使用纯Ant实现if else条件(检查命令行输入)
【发布时间】:2013-03-13 15:29:24
【问题描述】:

我是 Ant 的新手。我的 ant 脚本从命令行接收名为“env”的用户输入变量:

例如ant doIt -Denv=test

用户输入值可以是“test”、“dev”或“prod”。

我也有“doIt”目标:

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

在我的目标中,我想为我的 ant 脚本创建以下 if else 条件:

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,我可以用 &lt;if&gt; &lt;else&gt; 编写 ant 脚本。 但是对于我的项目,我想使用纯Ant来实现if else条件。也许,我应该使用&lt;condition&gt; ??但我不确定如何将&lt;condition&gt; 用于我的逻辑。有人能帮帮我吗?

【问题讨论】:

  • 如果您是 Ant 新手,请考虑改用 Gradle。这要容易得多。

标签: ant


【解决方案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>

带有- 前缀的目标是私有的,因此用户将无法从命令行运行它们。

【讨论】:

  • 感谢您提供宝贵的信息(带有 - 前缀的目标是私有的,因此用户将无法从命令行运行它们。)
  • 我了解到2013年没有发布ant 1.9。 Ant 1.9 原生支持 if 和 unless。 ant.apache.org/manual/ifunless.html。这对于因谷歌而来到这里的人很有用;)
【解决方案2】:

如果你们中的任何人需要一个简单的 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>

【讨论】:

    猜你喜欢
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多