Ant和可用任务-如果某些内容不可用怎么办?

时间:2020-03-06 14:43:27  来源:igfitidea点击:

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

当我打印属性的值时,如果资源可用,它将给出true,但否则仅打印属性名称。

如果资源不可用,是否可以将属性设置为某个值?我尝试过在可用检查之前显式设置属性,但随后ant抱怨道:

[available] DEPRECATED -  used to override an existing property.
[available]   Build file should not reuse the same property name for different values.

解决方案

我们可以将条件与否结合使用:

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

<condition property="fooDoesNotExist">
    <not>
      <available filepath="path/to/foo"/>
    </not>
  </condition>

此行为的原因是目标中的if / unless属性。如果/除非设置了具有名称的属性,则将执行具有这种属性的目标。如果将其设置为false或者设置为true,则没有任何区别。因此,我们可以使用available-task设置(或者不设置)属性,并基于此任务执行(或者不执行)任务。在available-task之前设置属性不是解决方案,因为ant中的属性是不可变的,因此一旦设置便无法更改。

有三种可能的解决方案,可以在之前未设置属性的情况下将其设置为值:

  • 我们可以结合使用available-task和not。
  • 我们创建一个设置属性的任务,仅当该属性未设置(任务的除非属性)时,该任务才会执行。
  • 我们只需在调用available之后将属性设置为即可。由于只有在未设置的情况下才会更改属性,因此可以完成我们想要的操作。

<available filepath="/path/to/foo" property="foosThere" value="true"/>
<property name="foosThere" value="false"/>

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