條件是 <condition>
和 <waitfor>
任務的巢狀元素。有核心條件和自訂條件。自訂條件說明於 自訂條件。核心條件說明如下。
這些是可於 <condition>
和 <waitfor>
任務中做為條件使用的巢狀元素。
<not>
元素預期只有一個其他條件巢狀到此元素中,否定條件的結果。它沒有任何屬性,且接受所有條件任務的巢狀元素做為巢狀元素。
<and>
元素沒有任何屬性,且接受任意數量的條件做為巢狀元素,支援所有條件任務的巢狀元素。此條件在所有包含條件都成立時為真,條件會依據在建置檔中指定的順序評估。
<and>
條件具有與 Java &&
算子相同的捷徑語意,只要其中一個巢狀條件為假,就不會評估其他條件。
<or>
元素沒有任何屬性,且接受任意數量的條件做為巢狀元素,支援所有條件任務的巢狀元素。此條件在至少一個包含條件成立時為真,條件會依據在建置檔中指定的順序評估。
<or>
條件具有與 Java ||
算子相同的捷徑語意,只要其中一個巢狀條件為真,就不會評估其他條件。
<xor>
元素對所有巢狀元素執行異或,類似於 Java 中的 ^
算子。只有當奇數個巢狀條件為真時,才會評估為真。與 <and>
和 <or>
測試不同,它不會捷徑評估。它沒有任何屬性,且接受所有條件任務的巢狀元素做為巢狀元素。
此條件與 Available 任務相同,支援該任務的所有屬性和巢狀元素,property 和 value 屬性是多餘的,且將會被忽略。
此條件與 Uptodate 任務相同,支援該任務的所有屬性和巢狀元素,property 和 value 屬性是多餘的,且將會被忽略。
測試目前的作業系統是否為特定類型。每個已定義的屬性都會被測試,且只有在所有測試都成功時,結果才會為真。
屬性 | 說明 | 必要 |
---|---|---|
family | 預期的作業系統家族名稱。 | 否 |
name | 預期的作業系統名稱。 | 否 |
arch | 預期的作業系統架構。 | 否 |
version | 預期的作業系統版本。 | 否 |
family 屬性支援的值為
windows—適用於所有版本的 Microsoft Windows
dos—適用於所有基於 Microsoft DOS 的作業系統,包括 Microsoft Windows 和 OS/2
mac—適用於所有早於 Mac OS X 的 Apple Macintosh 系統
unix—適用於所有類 Unix 作業系統,包括 Linux 和 Mac OS X/macOS
netware—適用於 Novell NetWare
os/2—適用於 OS/2
tandem—適用於 HP 的 NonStop Kernel,以前稱為 Tandem
win9x—適用於 Microsoft Windows 95 和 98、ME 和 CE
winnt—適用於基於 Microsoft Windows NT 的系統,包括 Windows 2000、XP 和後續版本
z/os—適用於 z/OS 和 OS/390
os/400—適用於 OS/400
openvms—適用於 OpenVMS
測試兩個給定值是否相等。
屬性 | 說明 | 必要 |
---|---|---|
arg1 | 要測試的第一個值。 | 是 |
arg2 | 要測試的第二個值。 | 是 |
casesensitive | 執行大小寫敏感的比較。 | 否;預設為 true |
trim | 在比較引數之前,修剪空白。 | 否;預設為 false |
forcestring | 強制 arg1/arg2 的字串比較。自 Apache Ant 1.8.1 起 | 否;預設為 false |
測試在此專案中是否已設定特定屬性。
屬性 | 說明 | 必要 |
---|---|---|
property | 要測試的屬性名稱。 | 是 |
此條件與 Checksum 任務相同,支援該任務的所有屬性和巢狀元素,property 和 overwrite 屬性是多餘的,將會被忽略。
http
條件會檢查指定 URL 的網路伺服器是否傳回有效的回應。預設情況下,HTTP 回應錯誤 400 或更高會被視為無效。
屬性 | 說明 | 必要 |
---|---|---|
url | 要請求的頁面完整 URL。網路伺服器必須傳回低於 errorsBeginAt 值的狀態碼 | 是 |
errorsBeginAt | 指示錯誤的最低 HTTP 回應代碼;伺服器錯誤、未授權、找不到等將被偵測 | 否;預設為 400 |
requestMethod | 發出請求時要使用的 HTTP 方法。任何 GET、 POST、 HEAD、 OPTIONS、 PUT、 DELETE和 TRACE都有效,但須遵守通訊協定的限制。 自 Ant 1.8.0 起 |
否;預設為 GET |
followRedirects | 是否應遵循重新導向。 自 Ant 1.9.7 起 |
否;預設為 true |
readTimeout | 從目標 URL 讀取時要使用的讀取逾時時間(毫秒)。接受大於或等於 0 的任何值。0 的值表示無限期等待。小於 0 的值將會被自動忽略。 自 Ant 1.10.6 起 |
否;預設為 0 |
socket
條件會檢查指定主機和埠上是否存在 TCP/IP 監聽器。
屬性 | 說明 | 必要 |
---|---|---|
server | 伺服器的 DNS 名稱或 IP 位址。 | 是 |
port | 要連線的埠號。 | 是 |
測試兩個檔案是否相符。其中一個檔案不存在會導致 false
,但如果兩個檔案都不存在,則會視為內容相等。此測試會逐位元組比較,因此測試時間會隨著位元組大小而遞增。注意:如果檔案大小不同,其中一個檔案遺失,或檔名相符,則答案非常明顯,因此會省略詳細測試。
屬性 | 說明 | 必要 |
---|---|---|
file1 | 要測試的第一個檔案 | 是 |
file2 | 要測試的第二個檔案 | 是 |
textfile | 比較檔案時是否忽略行尾。自 Ant 1.7 起 | 否;預設為 false,這會觸發二進位比較 |
測試字串是否包含另一個字串。
屬性 | 說明 | 必要 |
---|---|---|
string | 要搜尋的字串。 | 是 |
substring | 要搜尋的子字串。 | 是 |
casesensitive | 執行大小寫敏感的比較。 | 否;預設為 true |
測試字串是否等於 Ant 任何定義為 true 的定義,即 true
、yes
或 on
屬性 | 說明 | 必要 |
---|---|---|
value | 要測試的值 | 是 |
<istrue value="${someproperty}"/> <istrue value="false"/>
測試字串是否不為 true,<istrue>
的否定
屬性 | 說明 | 必要 |
---|---|---|
value | 要測試的值 | 是 |
<isfalse value="${someproperty}"/> <isfalse value="false"/>
測試此專案中是否已定義給定的參考,以及(選擇性)是否為預期的類型。
自 Apache Ant 1.6 起.
屬性 | 說明 | 必要 |
---|---|---|
refid | 要測試的參考的 id。 | 是 |
type | 此參考預期為的資料類型或任務名稱。 | 否 |
測試 jar 檔案是否已簽署。如果傳遞簽署名稱,則會檢查檔案是否存在該特定簽署;否則,會檢查檔案是否存在任何簽署。它不會執行嚴格的簽署驗證;它只會尋找簽署是否存在。
自 Apache Ant 1.7 起.
屬性 | 說明 | 必要 |
---|---|---|
file | 要測試是否存在簽署的 jar 檔案。 | 是 |
name | 要檢查的簽署名稱。 | 否 |
測試檔案是否通過嵌入的 選擇器。
自 Apache Ant 1.6.3 起.
屬性 | 說明 | 必要 |
---|---|---|
file | 要檢查是否通過嵌入選擇器的檔案。 | 是 |
basedir | 要使用於基於名稱的選擇器的基本目錄。如果未設定此項,則會使用專案的 basedir。 | 否 |
範例用法
<isfileselected file="a.xml"> <date datetime="06/28/2000 2:02 pm" when="equal"/> </isfileselected>
測試是否已定義特定類型,以及是否可以載入其實作類別。類型包括任務、資料類型、scriptdef、macrodef 和 presetdef。
自 Apache Ant 1.7 起.
屬性 | 說明 | 必要 |
---|---|---|
name | 類型的名稱 | 是 |
uri | 此類型存在的 URI。 | 否 |
範例用法
<typefound name="junit"/> <typefound uri="antlib:org.apache.maven.artifact.ant" name="artifact"/>
根據任何 Apache BSF 或 JSR 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 | 要使用的類別路徑,以 參考 的形式提供,指向其他地方定義的路徑。 | 否 |
請參閱 script 任務,以使用此巢狀元素。
此指令碼支援內嵌指令碼語言,此指令碼可以存取與 <script>
任務相同的 bean,以及 self
bean,它會回溯至條件本身。如果指令碼評估為布林結果,則這是條件評估的結果(自 Ant 1.7.1 起)。或者,可以使用 self.value
來設定評估結果。
範例
<scriptcondition language="javascript" value="true"> self.setValue(false); </scriptcondition>
將條件的預設值設定為 true
,然後在指令碼中,將值設定為 false
。此條件總是評估為 false
。
透過嘗試設定適當的屬性/功能,測試 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 位置定義。
使用 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 是否不為空。
自 Ant 1.7 起
測試可執行檔的回傳碼(參閱 Exec 任務)是否失敗。
屬性 | 說明 | 必要 |
---|---|---|
code | 要測試的回傳碼。 | 是 |
自 Ant 1.7 起
此條件是 ResourceCount 任務的一個面向。用於測試 資源集合 的大小。
<resourcecount refid="myresourcecollection" when="greater" count="0"/>
驗證資源集合不為空。
自 Ant 1.7 起
測試資源是否相符。即使沒有資源存在,但如果沒有資源存在,它們在內容方面被視為相等,則會導致 false
。預設情況下,此測試執行逐位元組比較,因此測試時間會隨著位元組大小而縮放。注意:如果檔案大小不同,其中一個檔案遺失或檔名相符,答案非常明顯,因此會省略詳細測試。要檢查的資源指定為巢狀 資源集合,表示可以檢查兩個以上的資源;在這種情況下,所有資源都必須相符。
屬性 | 說明 | 必要 |
---|---|---|
astext | 比較資源內容時是否忽略行尾;true會觸發二進位比較。 |
否;預設為 false |
自 Ant 1.7.1 起
測試資源是否包含給定的(子)字串。
要檢查的資源透過參照或(在檔案資源的情況下)透過 resource 屬性指定。
屬性 | 說明 | 必要 |
---|---|---|
resource | 要測試的資源的檔案名稱。 | 兩個屬性中只有一個 |
refid | 專案內定義的資源參照。 | |
substring | 要搜尋的子字串。 | 是 |
casesensitive | 執行大小寫敏感的比較。 | 否;預設為 true |
自 Ant 1.7 起
測試類別是否有方法或欄位。如果找不到類別或無法載入,則建置會失敗。
屬性 | 說明 | 必要 |
---|---|---|
classname | 要載入的類別名稱 | yes |
field | 要尋找的欄位名稱 | 兩個屬性中只有一個 |
method | 要尋找的方法名稱 | |
ignoreSystemClasses | 是否應忽略系統類別? | 否;預設為 false |
classpath | 類別路徑 | 否 |
classpathref | 類別路徑參照 | 否 |
還有一個巢狀 <classpath>
元素,可用於指定類別路徑。
<hasmethod classname="java.util.ArrayList" method="trimToSize"/>
在 java.util.ArrayList
類別中尋找方法 trimToSize()
。
自 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>
下列範例顯示如何使用 singleline 和 casesensitive 旗標。
<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 任務相同,支援所有屬性,property 屬性是多餘的,將會被忽略。
自 Ant 1.7.0 起
測試分割區是否有足夠的空間。
必要的屬性可以使用標準運算術語指定
屬性 | 說明 | 必要 |
---|---|---|
partition | 要檢查是否有可用空間的分割區或檔案系統 | 是 |
needed | 所需的可用空間量。 | 是 |
範例
<hasfreespace partition="c:" needed="100M"/>
自 Ant 1.8.0 起
測試資源的最後修改日期。
屬性 | 說明 | 必要 |
---|---|---|
millis | 指定資源預期的修改時間,單位為自 1970 年 1 月 1 日午夜起經過的毫秒數。 | 兩個屬性中只有一個 |
datetime | 指定資源預期的修改時間。特殊值 now表示目前時間。 |
|
pattern | 與 SimpleDateFormat 相容的模式字串。 | 否;預設為 MM/dd/YYYY hh:mm a或 MM/dd/YYYY hh:mm:ss a |
mode | 如何比較時間戳記。可接受的值為 equals、 before、 not-before、 after和 not-after。 | 否;預設為 equals |
要測試的實際資源指定為巢狀元素。
範例
<islastmodified dateTime="08/18/2009 04:41:19 AM" mode="not-before"> <file file="${file}"/> </islastmodified>
自 Ant 1.8.0 起
測試資源是否存在。
要測試的實際資源指定為巢狀元素。
範例
<resourceexists> <file file="${file}"/> </resourceexists>
自 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。