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时才会成功。