6

当我使用该任务时,该属性仅在资源(例如文件)可用时才设置为 TRUE。如果不是,则该属性未定义。

当我打印属性的值时,如果资源可用,则返回 true,否则只打印属性名称。

如果资源不可用,有没有办法将属性设置为某个值?我曾尝试在可用检查之前明确设置属性,但随后 ant 抱怨:

[可用] 已弃用 - 用于覆盖现有属性。
[可用] 构建文件不应为不同的值重用相同的属性名称。
4

3 回答 3

16

您可以将条件与 not 结合使用:

http://ant.apache.org/manual/Tasks/condition.html

  <condition property="fooDoesNotExist">
    <not>
      <available filepath="path/to/foo"/>
    </not>
  </condition>
于 2008-09-25T14:40:20.430 回答
10
<available filepath="/path/to/foo" property="foosThere" value="true"/>
<property name="foosThere" value="false"/>

foosThere 的分配只有在您的可用性检查尚未设置为 true 时才会成功。

于 2009-09-02T15:19:28.087 回答
2

这种行为的原因是目标中的 if/unless 属性。如果/除非设置了具有该名称的属性,则将执行具有此类属性的目标。如果它设置为 false 或设置为 true 没有区别。因此,您可以使用 available-task 设置(或不设置)属性并基于此执行(或不执行)任务。在available-task之前设置属性是没有办法的,因为ant中的属性是不可变的,一旦设置就不能更改。

有三种可能的解决方案,将属性设置为之前未设置的值:

  1. 您将 available-task 与 not 结合使用。
  2. 您创建一个设置属性的任务,仅当属性未设置时才会执行(除非任务属性)。
  3. 您只需在调用后将属性设置为可用。由于该属性仅在未设置时才会更改,因此这将满足您的要求。
于 2008-09-25T16:07:33.760 回答