【问题标题】:How to check if a property exists?如何检查属性是否存在?
【发布时间】:2018-01-24 00:30:24
【问题描述】:

如何使用 Ant 检查属性是否存在?

如果 Ant 没有提供类似的东西,我愿意使用 ant-contrib

另外,ant-contrib 有一个断言任务,它提供exists,但这里不需要断言,因为我更喜欢布尔返回值。

【问题讨论】:

  • 如果有人知道怎么做,请编辑上面的评论,不确定使用 4 个缩进的代码标签在评论中是否有效。
  • "if" 任务仅受 Ant-contrib 支持,我不建议将其用于严肃的开发。
  • @funkybro - 同意。为什么是劳迪? ant-contrib 摇滚,让 Ant 离 Gradle 更近了一步。

标签: ant


【解决方案1】:

您可以将Condition 任务与isset 条件结合使用。

<project default="test">

  <property name="a" value="a"/>

  <target name="test">

    <condition property="a.set" else="false">
      <isset property="a"/>
    </condition>

    <condition property="b.set" else="false">
      <isset property="b"/>
    </condition>

    <echo message="a set ? ${a.set}"/>
    <echo message="b set ? ${b.set}"/>

  </target>
</project>

输出:

test:
     [echo] a set ? true
     [echo] b set ? false

【讨论】:

  • 请务必省略 &lt;condition&gt;&lt;isset&gt; 中属性名称周围的 ${}。
  • @sudocode 但如果 "a" 为空 (value=" ") a.set 将是假的,而不是真的。为什么??????
【解决方案2】:

从 Ant 1.9.1 开始,可以使用“if”和“unless”属性。如果您将 2 个命名空间 xmlns:if="ant:if" 和 xmlns:unless="ant:unless" 添加到项目中,则可以使用这些新属性。

<!DOCTYPE project>
<project xmlns:if="ant:if" xmlns:unless="ant:unless">
  <property unless:set="property" name="property.is.set" value="false"/>
  <property if:set="property" name="property.is.set" value="true"/>
  <echo>${property.is.set}</echo>
</project>

另见https://ant.apache.org/manual/ifunless.html

【讨论】:

  • 事实上您应该使用 Ant >= 1.9.3,因为 Ant 1.9.1 中的第一个实现存在与 if/unless 功能相关的错误!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
相关资源
最近更新 更多