如何检查 属性 或变量是否为空并设置一个值然后测试该值

How to check a property or variable is empty and set a value then test for that value

我们使用的是 Ant 1.8。我不是 Ant 开发者,但有时我不得不假装。

一个新的 属性,${noReportDSUpgrade},旨在 "true" 或 "false"。

默认情况下它是空的(不存在?)这是 "false" 我们的目的。

如果此 属性 为空,则应设置为 "false"。

使用此参数的命令行应将其设置为 true。

1) 如何将 ${noReportDSUpgrade} 设置为 false(如果为空)和 true(如果提供)?

2)对于target,只有false时如何执行?

我已经尝试了几个我发现的建议,但无法让它发挥作用。

脚本开头:

<target name="init">
    <antcall target="setnoReportDSUpgradeProperty"/>

再往下:

<target name="setnoReportDSUpgradeProperty">
    <condition>
        <or>
            <equals arg1="${noReportDSUpgrade}" arg2=""/>
            <not>
                <isset property="false"/>
            </not>
       </or>
    </condition>
    <echo message="noReportDSUpgrade set to ${noReportDSUpgrade}"/>         
</target>

以下是在 Ant 中设置默认 属性 值的方法:

<property name="noReportDSUpgrade" value="false" />

就是这样!属性在 Ant 中是不可变的,因此如果您通过命令行或在脚本的前面设置值,后续 <property> 任务将不会更改它。这不会说明 属性 被设置为空白值(即“”),但作为一般的良好做法,尽量避免将属性设置为空白。

尽管我认为您不需要 <condition> 任务来实现您的目标,但我觉得我应该在您的示例中澄清一些问题。 <condition> 任务不会影响它嵌套的 <target>;它只是设置一个 属性,由 property 属性指定。此外,isset 条件的 property 属性用于指向您正在检查的 属性 的 name,而不是值。

<condition property="noReportDSUpgrade">
    <or>
        <equals arg1="${noReportDSUpgrade}" arg2=""/>
        <not>
            <isset property="noReportDSUpgrade" />
        </not>
    </or>
</condition>

但正如我上面所说,除非出于某种原因确实需要检查空白值,否则不要使用它。只需使用 <property>.

至于有条件地 运行ning 目标,<target> 块支持 ifunless 属性来控制整个事物是否 运行s .这可能有点令人困惑,因为它有两种运行模式。

<target name="myTarget" if="myCondition">
    <echo message="Running myTarget" />
</target>

如果 myCondition 已设置 ,则上述目标将 运行(如果其值为 true,则不会)。因此,如果它的计算结果为 "true"、"false"、"asdf",或者只是空白,目标仍将是 运行。相反,如果我们使用 unless 属性,如果 myCondition 设置为任何值,它就不会 运行。当您使用 <condition> 任务设置属性时,这通常很方便(因为如果布尔值计算为 false,<condition> 不会设置值)。

<target name="myTarget" if="${myCondition}">
    <echo message="Running myTarget" />
</target>

注意 myCondition 周围的 ${}。当您像这样扩展 属性 时,如果 属性 的值为 "true"、"on" 或 [=63=,Ant 只会 运行 目标].

最后,您通常不需要仅仅为了设置条件而创建单独的目标。在相对简单的脚本中,您可以只使用隐式根目标(即将任务放在所有其他目标之外的根级别)。

简而言之,这是编写脚本的最简单方法。

<project name="myProject">
    <property name="noReportDSUpgrade" value="false" />

    <target name="myTarget" if="${noReportDSUpgrade}">
        <echo message="Running myTarget" />
    </target>
</project>

如果你真的需要一个初始化目标(注意depends属性):

<project name="myProject">
    <target name="init">
        <property name="noReportDSUpgrade" value="false" />
    </target>

    <target name="myTarget" if="${noReportDSUpgrade}" depends="init">
        <echo message="Running myTarget" />
    </target>
</project>