Ant'的使用限制是什么;s如果/除非条件属性?
所以我们使用的是基本的Ant1.9.4,稍微使用了1.9.1新的if/除非属性。比如说,Ant'的使用限制是什么;s如果/除非条件属性?,ant,Ant,所以我们使用的是基本的Ant1.9.4,稍微使用了1.9.1新的if/除非属性。比如说, <project xmlns:if="ant:if" xmlns:unless="ant:unless"> .... miles and miles of XML .... <jar ....> <service ....> <provider classname="a.b.c.X" if:true="${some.flag}"/> &l
<project xmlns:if="ant:if" xmlns:unless="ant:unless">
.... miles and miles of XML ....
<jar ....>
<service ....>
<provider classname="a.b.c.X" if:true="${some.flag}"/>
<provider ..../>
</service>
<fileset>
....the stuff in here will matter shortly....
</fileset>
</jar>
使用这种语法,我们会得到一个错误“zip文件不能包含它自己”,行号指向jar
任务的开头。这显然是伪造的语法但是,出于绝望将第二个if:true
更改为简单的if
,并且不做其他更改,从而避免了错误,并为我们提供了正确的基于标志的可选包含行为
这是怎么回事?新语法是否在
和/或文件集的嵌套
块中不可用
作为一个实验,我尝试在其他一些有用的地方使用if:true
或if:set
属性。在一些地方,它工作得很好。在某些地方,我发现了一些奇怪的无意义错误,很明显,这种错误是解析器在出轨时打印出来的。每次,将if:set=“$(foo}”
修改为if=“foo”
和if:true=“${foo}”
修改为if=“${foo}”
都返回到所需的if-then行为。因此,这不是一个阻塞问题,但如果可能,我们宁愿使用自文档化:条件
我在Ant手册中找不到任何这样的限制,但是手册使用不同的描述在至少两个不同的地方描述了if/除非语法。(由于手册中使用了HTML框架,我不确定它们在哪里;每个URL都显示为index.HTML
。每当我参考手册时,感觉就像是在1999年浏览一样,宝贝!*MC Hammer会滑出房间吗*)自Ant 1.4以来,嵌套在
元素下的
和
元素都支持。每个
都有一个隐式
嵌套在其下,因此if
和else
属性对其可用
<condition property="some.flag.istrue">
<istrue value="${some.flag}"/>
</condition>
<fileset dir="somedir">
<!-- The "if" below is different than "if:true". -->
<include name="optional_file" if="some.flag.istrue"/>
</fileset>
在上面的示例中,
中的if
是“默认”Ant XML命名空间中的一个普通Ant属性。另一方面,if:true
位于Ant:if
XML命名空间中
命名空间的if:true
不能与
元素一起工作。如果提供给if:true
的值没有计算为true
,那么Ant的行为就好像整个
元素不存在一样。这是不好的,因为Ant使用空模式集表示“匹配每个文件”。这可能是您收到“zip文件不能包含自身”错误的原因;
可能包含目标JAR文件
坚持使用
和
元素的普通if
和else
属性,这样应该可以工作
<condition property="some.flag.istrue">
<istrue value="${some.flag}"/>
</condition>
<fileset dir="somedir">
<!-- The "if" below is different than "if:true". -->
<include name="optional_file" if="some.flag.istrue"/>
</fileset>