如何检查 属性 或变量是否为空并设置一个值然后测试该值
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>
块支持 if
和 unless
属性来控制整个事物是否 运行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>
我们使用的是 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>
块支持 if
和 unless
属性来控制整个事物是否 运行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>