【发布时间】:2010-09-13 02:52:09
【问题描述】:
当我使用任务时,如果资源(比如文件)可用,则该属性仅设置为 TRUE。如果不是,则该属性未定义。
当我打印属性的值时,如果资源可用,则返回 true,否则只打印属性名称。
如果资源不可用,有没有办法将属性设置为某个值?我曾尝试在可用检查之前明确设置属性,但随后 ant 抱怨:
[可用] 已弃用 - 用于覆盖现有属性。 [可用] 构建文件不应为不同的值重用相同的属性名称。【问题讨论】:
当我使用任务时,如果资源(比如文件)可用,则该属性仅设置为 TRUE。如果不是,则该属性未定义。
当我打印属性的值时,如果资源可用,则返回 true,否则只打印属性名称。
如果资源不可用,有没有办法将属性设置为某个值?我曾尝试在可用检查之前明确设置属性,但随后 ant 抱怨:
[可用] 已弃用 - 用于覆盖现有属性。 [可用] 构建文件不应为不同的值重用相同的属性名称。【问题讨论】:
您可以将条件与 not 结合使用:
http://ant.apache.org/manual/Tasks/condition.html
<condition property="fooDoesNotExist">
<not>
<available filepath="path/to/foo"/>
</not>
</condition>
【讨论】:
<available filepath="/path/to/foo" property="foosThere" value="true"/>
<property name="foosThere" value="false"/>
foosThere 的分配只有在您的可用性检查尚未设置为 true 时才会成功。
【讨论】:
这种行为的原因是目标中的 if/unless 属性。如果/除非设置了具有该名称的属性,则将执行具有此类属性的目标。如果它设置为 false 或设置为 true 没有区别。因此,您可以使用 available-task 设置(或不设置)属性并基于此执行(或不执行)任务。在available-task之前设置属性是没有办法的,因为ant中的属性是不可变的,一旦设置就无法更改。
如果之前未设置,则将属性设置为值有三种可能的解决方案:
【讨论】: