Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant'的使用限制是什么;s如果/除非条件属性?_Ant - Fatal编程技术网

Ant'的使用限制是什么;s如果/除非条件属性?

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

所以我们使用的是基本的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}"/>
    <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>