所以我們使用的是基本的Ant 1.9.4,稍微使用了1.9.1的新的if/unless屬性。例如,對Ant的if/unless條件屬性有什麼用法限制?
<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>
與some.flag
總是被設置爲true
或false
,從來沒有離開過未設置,並且永遠不會設置爲任何其他值(在先前看過的屬性文件中指定,如果該事項),以及它奇妙的作品,給我們完全我們需要的行爲。喜悅!
最近,我們試圖做出一些jar任務的fileset
條目聰明一點的,如
<fileset dir="somedir">
<include name="optional_file" if:true="${some.flag}"/> <!-- same property name as before -->
</fileset>
有了這個語法,我們得到一個錯誤「的zip文件不能包括自身」,有行號指向jar
任務的開始。這顯然是虛假的語法。 然而,改變這個第二if:true
簡單if
出於絕望 - 並且不對其他變化 - 避免錯誤,給了我們正確的基於旗可選包行爲。
這是怎麼回事嗎?新的語法在<fileset>
和/或fileset
的嵌套<include>
塊中簡單不可用?
作爲一個實驗,我嘗試在其他一些有用的地方適當使用if:true
或if:set
屬性。有些地方完美運作。有些地方我得到了一些奇怪的無意義錯誤,顯然這是解析器在離開軌道時打印的東西。每一次,再加工成if:set="$(foo}"
和if="foo"
到if:true="${foo}"
了if="${foo}"
回所需的if-then行爲。所以這不是一個阻塞問題,但如果可以的話,我們寧願自己記錄:condition
。
我找不到在Ant手冊這種限制的提及,但本手冊介紹了,如果/除非使用不同的描述至少兩個不同位置的語法。 (我不確定它們是由於手冊使用HTML框架而引起的;每個URL顯示爲index.html
。隨時我參考手冊,感覺就像我正在瀏覽1999年一樣,寶貝!* MC Hammer slide出了房間*)
啊哈!很好的解釋,謝謝你的時間! –