條件

條件是 <condition><waitfor> 任務的巢狀元素。有核心條件和自訂條件。自訂條件說明於 自訂條件。核心條件說明如下。

核心條件

這些是可於 <condition><waitfor> 任務中做為條件使用的巢狀元素。

not

<not> 元素預期只有一個其他條件巢狀到此元素中,否定條件的結果。它沒有任何屬性,且接受所有條件任務的巢狀元素做為巢狀元素。

and

<and> 元素沒有任何屬性,且接受任意數量的條件做為巢狀元素,支援所有條件任務的巢狀元素。此條件在所有包含條件都成立時為真,條件會依據在建置檔中指定的順序評估。

<and> 條件具有與 Java && 算子相同的捷徑語意,只要其中一個巢狀條件為假,就不會評估其他條件。

or

<or> 元素沒有任何屬性,且接受任意數量的條件做為巢狀元素,支援所有條件任務的巢狀元素。此條件在至少一個包含條件成立時為真,條件會依據在建置檔中指定的順序評估。

<or> 條件具有與 Java || 算子相同的捷徑語意,只要其中一個巢狀條件為真,就不會評估其他條件。

xor

<xor> 元素對所有巢狀元素執行異或,類似於 Java 中的 ^ 算子。只有當奇數個巢狀條件為真時,才會評估為真。與 <and><or> 測試不同,它不會捷徑評估。它沒有任何屬性,且接受所有條件任務的巢狀元素做為巢狀元素。

available

此條件與 Available 任務相同,支援該任務的所有屬性和巢狀元素,property 和 value 屬性是多餘的,且將會被忽略。

uptodate

此條件與 Uptodate 任務相同,支援該任務的所有屬性和巢狀元素,property 和 value 屬性是多餘的,且將會被忽略。

os

測試目前的作業系統是否為特定類型。每個已定義的屬性都會被測試,且只有在所有測試都成功時,結果才會為真。

屬性 說明 必要
family 預期的作業系統家族名稱。
name 預期的作業系統名稱。
arch 預期的作業系統架構。
version 預期的作業系統版本。

family 屬性支援的值為

equals

測試兩個給定值是否相等。

屬性 說明 必要
arg1 要測試的第一個值。
arg2 要測試的第二個值。
casesensitive 執行大小寫敏感的比較。 否;預設為 true
trim 在比較引數之前,修剪空白。 否;預設為 false
forcestring 強制 arg1/arg2 的字串比較。自 Apache Ant 1.8.1 起 否;預設為 false

isset

測試在此專案中是否已設定特定屬性。

屬性 說明 必要
property 要測試的屬性名稱。

checksum

此條件與 Checksum 任務相同,支援該任務的所有屬性和巢狀元素,property 和 overwrite 屬性是多餘的,將會被忽略。

http

http 條件會檢查指定 URL 的網路伺服器是否傳回有效的回應。預設情況下,HTTP 回應錯誤 400 或更高會被視為無效。

屬性 說明 必要
url 要請求的頁面完整 URL。網路伺服器必須傳回低於 errorsBeginAt 值的狀態碼
errorsBeginAt 指示錯誤的最低 HTTP 回應代碼;伺服器錯誤、未授權、找不到等將被偵測 否;預設為 400
requestMethod 發出請求時要使用的 HTTP 方法。任何 GETPOSTHEADOPTIONSPUTDELETETRACE 都有效,但須遵守通訊協定的限制。
自 Ant 1.8.0 起
否;預設為 GET
followRedirects 是否應遵循重新導向。
自 Ant 1.9.7 起
否;預設為 true
readTimeout 從目標 URL 讀取時要使用的讀取逾時時間(毫秒)。接受大於或等於 0 的任何值。0 的值表示無限期等待。小於 0 的值將會被自動忽略。
自 Ant 1.10.6 起
否;預設為 0

socket

socket 條件會檢查指定主機和埠上是否存在 TCP/IP 監聽器。

屬性 說明 必要
server 伺服器的 DNS 名稱或 IP 位址。
port 要連線的埠號。

filesmatch

測試兩個檔案是否相符。其中一個檔案不存在會導致 false,但如果兩個檔案都不存在,則會視為內容相等。此測試會逐位元組比較,因此測試時間會隨著位元組大小而遞增。注意:如果檔案大小不同,其中一個檔案遺失,或檔名相符,則答案非常明顯,因此會省略詳細測試。

屬性 說明 必要
file1 要測試的第一個檔案
file2 要測試的第二個檔案
textfile 比較檔案時是否忽略行尾。自 Ant 1.7 起 否;預設為 false,這會觸發二進位比較

contains

測試字串是否包含另一個字串。

屬性 說明 必要
string 要搜尋的字串。
substring 要搜尋的子字串。
casesensitive 執行大小寫敏感的比較。 否;預設為 true

istrue

測試字串是否等於 Ant 任何定義為 true 的定義,即 trueyeson

屬性 說明 必要
value 要測試的值
<istrue value="${someproperty}"/>
<istrue value="false"/>

isfalse

測試字串是否不為 true,<istrue> 的否定

屬性 說明 必要
value 要測試的值
<isfalse value="${someproperty}"/>
<isfalse value="false"/>

isreference

測試此專案中是否已定義給定的參考,以及(選擇性)是否為預期的類型。

自 Apache Ant 1.6 起.

屬性 說明 必要
refid 要測試的參考的 id
type 此參考預期為的資料類型或任務名稱。

issigned

測試 jar 檔案是否已簽署。如果傳遞簽署名稱,則會檢查檔案是否存在該特定簽署;否則,會檢查檔案是否存在任何簽署。它不會執行嚴格的簽署驗證;它只會尋找簽署是否存在。

自 Apache Ant 1.7 起.

屬性 說明 必要
file 要測試是否存在簽署的 jar 檔案。
name 要檢查的簽署名稱。

isfileselected

測試檔案是否通過嵌入的 選擇器

自 Apache Ant 1.6.3 起.

屬性 說明 必要
file 要檢查是否通過嵌入選擇器的檔案。
basedir 要使用於基於名稱的選擇器的基本目錄。如果未設定此項,則會使用專案的 basedir

範例用法

<isfileselected file="a.xml">
  <date datetime="06/28/2000 2:02 pm" when="equal"/>
</isfileselected>

typefound

測試是否已定義特定類型,以及是否可以載入其實作類別。類型包括任務、資料類型、scriptdef、macrodef 和 presetdef。

自 Apache Ant 1.7 起.

屬性 說明 必要
name 類型的名稱
uri 此類型存在的 URI。

範例用法

<typefound name="junit"/>
<typefound uri="antlib:org.apache.maven.artifact.ant" name="artifact"/>

scriptcondition

根據任何 Apache BSFJSR 223 支援語言中的指令碼,評估條件。

請參閱 Script 任務,以了解指令碼和依賴項目的說明。

自 Apache Ant 1.7 起.

屬性 說明 必要
language 指令碼語言
manager 要使用的指令碼引擎管理員。請參閱 script 任務,以了解如何使用此屬性。 否;預設為 auto
value 預設布林值 否;預設為 false
src 指令碼來源的檔案名稱
encoding 指令碼來源的編碼。自 Ant 1.10.2 起 否;預設為 JVM 預設字元編碼
setbeans 是否將所有屬性、參考和目標作為指令碼中的全域變數。自 Ant 1.8.0 起 否;預設為 true
classpath 要傳遞到指令碼中的類別路徑。
classpathref 要使用的類別路徑,以 參考 的形式提供,指向其他地方定義的路徑。
參數指定為巢狀元素
classpath

請參閱 script 任務,以使用此巢狀元素。

說明

此指令碼支援內嵌指令碼語言,此指令碼可以存取與 <script> 任務相同的 bean,以及 self bean,它會回溯至條件本身。如果指令碼評估為布林結果,則這是條件評估的結果(自 Ant 1.7.1 起)。或者,可以使用 self.value 來設定評估結果。

範例

<scriptcondition language="javascript"
        value="true">
    self.setValue(false);
</scriptcondition>

將條件的預設值設定為 true,然後在指令碼中,將值設定為 false。此條件總是評估為 false

parsersupports

透過嘗試設定適當的屬性/功能,測試 Ant 的 XML 剖析器是否支援指定的某個功能或屬性,依據 SAX/JAXP 規範

自 Apache Ant 1.7 起.

屬性 說明 必要
property 要設定的屬性 兩個屬性中只有一個
功能 要設定的功能
value 字串(屬性)或布林(功能) 用於屬性測試,但不用於功能測試
<parsersupports feature="http://xml.org/sax/features/namespaces"/>

檢查命名空間支援。所有 SAX2 剖析器都應該有此功能。

<or>
  <parsersupports
    feature="http://apache.org/xml/features/validation/schema"/>
  <parsersupports
    feature="http://java.sun.com/xml/jaxp/properties/schemaSource"/>
</or>

檢查 XML Schema 支援。

<parsersupports
  property="http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation"
  value="document.xsd"/>

檢查 Xerces 特有的無命名空間 Schema 位置定義。

isreachable

使用 Java 5+ 網路 API 來探查(遠端)系統是否可存取。實際使用的探查機制是 JVM 的實作功能。它們可能包括 ICMP「ping」封包、UDP 或 TCP 連線到埠 7「echo 服務」或其他方式。

此條件會將未知主機例外狀況轉換為 false 條件。這是因為在筆電上,當網路中斷時,DNS 是第一個中斷服務;您會隱含地離線。

如果提供 URL 而非 主機,則會擷取主機名稱並在測試中使用它,而 URL 的所有其他部分都會捨棄。

此測試可能無法穿透防火牆,也就是說,可以使用 HTTP 等通訊協定存取某些內容,但較低層級的 ICMP 封包會被丟棄。同樣地,主機可能會被偵測為可透過 ICMP 存取,但無法透過其他埠(例如埠 80)存取,因為防火牆的關係。

自 Apache Ant 1.7 起.

屬性 說明 必要
主機 要檢查的主機 兩個屬性中只有一個
url 包含主機名稱的 URL
逾時 逾時(秒) 否;預設為 30
<condition property="offline">
  <isreachable url="https://ibiblio.org/maven/"/>
</condition>

探查 Maven 存放庫是否可存取。

<condition property="offline">
  <isreachable host="ibiblio.org" timeout="10"/>
</condition>

使用主機名稱探查 Maven 存放庫是否可存取,逾時設定為 10 秒。

長度

自 Ant 1.6.3 起

此條件是 Length 任務的切面。它用於測試字串或一個或多個檔案的長度。

<length string=" foo " trim="true" length="3"/>

驗證字串是否為特定長度。

<length file="foo" when="greater" length="0"/>

驗證檔案 foo 是否不為空。

isfailure

自 Ant 1.7 起

測試可執行檔的回傳碼(參閱 Exec 任務)是否失敗。

屬性 說明 必要
code 要測試的回傳碼。

resourcecount

自 Ant 1.7 起

此條件是 ResourceCount 任務的一個面向。用於測試 資源集合 的大小。

<resourcecount refid="myresourcecollection" when="greater" count="0"/>

驗證資源集合不為空。

resourcesmatch

自 Ant 1.7 起

測試資源是否相符。即使沒有資源存在,但如果沒有資源存在,它們在內容方面被視為相等,則會導致 false。預設情況下,此測試執行逐位元組比較,因此測試時間會隨著位元組大小而縮放。注意:如果檔案大小不同,其中一個檔案遺失或檔名相符,答案非常明顯,因此會省略詳細測試。要檢查的資源指定為巢狀 資源集合,表示可以檢查兩個以上的資源;在這種情況下,所有資源都必須相符。

屬性 說明 必要
astext 比較資源內容時是否忽略行尾;true 會觸發二進位比較。 否;預設為 false

resourcecontains

自 Ant 1.7.1 起

測試資源是否包含給定的(子)字串。

要檢查的資源透過參照或(在檔案資源的情況下)透過 resource 屬性指定。

屬性 說明 必要
resource 要測試的資源的檔案名稱。 兩個屬性中只有一個
refid 專案內定義的資源參照。
substring 要搜尋的子字串。
casesensitive 執行大小寫敏感的比較。 否;預設為 true

hasmethod

自 Ant 1.7 起

測試類別是否有方法或欄位。如果找不到類別或無法載入,則建置會失敗。

屬性 說明 必要
classname 要載入的類別名稱 yes
field 要尋找的欄位名稱 兩個屬性中只有一個
method 要尋找的方法名稱
ignoreSystemClasses 是否應忽略系統類別? 否;預設為 false
classpath 類別路徑
classpathref 類別路徑參照

還有一個巢狀 <classpath> 元素,可用於指定類別路徑。

<hasmethod classname="java.util.ArrayList" method="trimToSize"/>

java.util.ArrayList 類別中尋找方法 trimToSize()

matches

自 Ant 1.7 起

測試指定的字串是否與指定的正規表示式模式相符

屬性 說明 必要
string 要測試的字串。
pattern 用於測試的正規表示式模式。 是,除非有巢狀 <regexp> 元素
casesensitive 執行大小寫敏感的比對。 否;預設為 true
multiline 執行多行比對。 否;預設為 false
singleline 這允許 . 比對新行。 SingleLine 不可與多行混淆,SingleLine 是 perl 正規表示式術語,它對應到 Java 正規表示式的 dotall 否;預設為 false

還有一個可選的 <regexp> 元素,可用於指定正規表示式,而不是 pattern 屬性。請參閱 Regexp 類型,以取得巢狀元素 regexp 的說明和正規表示式實作的選擇。

範例

<condition property="legal-password">
  <matches pattern="[1-9]" string="${user-input}"/>
</condition>
<fail message="Your password should at least contain one number"
      unless="legal-password"/>

如果屬性 input 長度為三個字元,以 a 開頭,以 b 結尾,則下列範例會設定屬性 ok

<condition property="ok">
  <matches string="${input}" pattern="^a.b$"/>
</condition>

下列定義一個參考正規表示式,用於比對日期,然後使用 antunit 檢查屬性 today 是否為正確格式

<regexp id="date.pattern" pattern="^[0123]\d-[01]\d-[12]\d\d\d$"/>

<au:assertTrue xmlns:au="antlib:org.apache.ant.antunit">
  <matches string="${today}">
    <regexp refid="date.pattern"/>
  </matches>
</au:assertTrue>

下列範例顯示如何使用 singlelinecasesensitive 旗標。

<au:assertTrue>
  <matches string="AB${line.separator}C" pattern="^ab.*C$"
           casesensitive="false"
           singleline="true"/>
</au:assertTrue>
<au:assertFalse>
  <matches string="AB${line.separator}C" pattern="^ab.*C$"
           casesensitive="false"
           singleline="false"/>
</au:assertFalse>

antversion

此條件與 Antversion 任務相同,支援所有屬性,property 屬性是多餘的,將會被忽略。

hasfreespace

自 Ant 1.7.0 起

測試分割區是否有足夠的空間。

必要的屬性可以使用標準運算術語指定

屬性 說明 必要
partition 要檢查是否有可用空間的分割區或檔案系統
needed 所需的可用空間量。

範例

<hasfreespace partition="c:" needed="100M"/>

islastmodified

自 Ant 1.8.0 起

測試資源的最後修改日期。

屬性 說明 必要
millis 指定資源預期的修改時間,單位為自 1970 年 1 月 1 日午夜起經過的毫秒數。 兩個屬性中只有一個
datetime 指定資源預期的修改時間。特殊值 now 表示目前時間。
pattern 與 SimpleDateFormat 相容的模式字串。 否;預設為 MM/dd/YYYY hh:mm aMM/dd/YYYY hh:mm:ss a
mode 如何比較時間戳記。可接受的值為 equalsbeforenot-beforeafternot-after否;預設為 equals

要測試的實際資源指定為巢狀元素。

範例

<islastmodified dateTime="08/18/2009 04:41:19 AM" mode="not-before">
  <file file="${file}"/>
</islastmodified>

resourceexists

自 Ant 1.8.0 起

測試資源是否存在。

要測試的實際資源指定為巢狀元素。

範例

<resourceexists>
  <file file="${file}"/>
</resourceexists>

javaversion

自 Ant 1.10.2 起

測試執行 Ant 的 JVM 版本。

屬性 說明 必要
atleast 此 JVM 至少為此版本。格式為 major.minor.point。從 Java 9 開始,實際上只會決定主要版本號碼。 三個條件中只有一個
atmost 此 JVM 最多為此版本。格式為 major.minor.point。從 Java 9 開始,實際上只會決定主要版本號碼。
自 Ant 1.10.10 起
exactly 此 JVM 正好為此版本。格式為 major.minor.point。從 Java 9 開始,實際上只會決定主要版本號碼。

範例

<javaversion atleast="9"/>

如果目前的 JVM 是 Java 9 或以上,將評估為 true。