条件

条件是 <condition><waitfor> 任务的嵌套元素。 存在核心条件和自定义条件。 自定义条件在 自定义条件 中描述。 核心条件在下面描述。

核心条件

这些是可以在 <condition><waitfor> 任务中用作条件的嵌套元素。

not

<not> 元素期望将正好一个其他条件嵌套到此元素中,从而否定该条件的结果。 它没有任何属性,并且接受条件任务的所有嵌套元素作为嵌套元素。

and

<and> 元素没有任何属性,并且接受任意数量的条件作为嵌套元素——支持条件任务的所有嵌套元素。 如果其包含的所有条件都为真,则此条件为真,条件将在构建文件中指定的顺序进行评估。

<and> 条件具有与 Java && 运算符相同的快捷语义,一旦嵌套条件之一为假,就不会评估其他条件。

or

<or> 元素没有任何属性,并且接受任意数量的条件作为嵌套元素——支持条件任务的所有嵌套元素。 如果其包含的条件中至少有一个为真,则此条件为真,条件将在构建文件中指定的顺序进行评估。

<or> 条件具有与 Java || 运算符相同的快捷语义,一旦嵌套条件之一为真,就不会评估其他条件。

xor

<xor> 元素对所有嵌套元素执行异或运算,类似于 Java 中的 ^ 运算符。 只有当奇数个嵌套条件为真时,它才评估为真。 与 <and><or> 测试不同,没有评估的快捷方式。 它没有任何属性,并且接受条件任务的所有嵌套元素作为嵌套元素。

available

此条件与 Available 任务相同,支持该任务的所有属性和嵌套元素,属性和值属性是多余的,将被忽略。

uptodate

此条件与 Uptodate 任务相同,支持该任务的所有属性和嵌套元素,属性和值属性是多余的,将被忽略。

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 任务相同,支持该任务的所有属性和嵌套元素,属性和覆盖属性是多余的,将被忽略。

http

http 条件检查指定 URL 的 Web 服务器是否返回有效响应。 默认情况下,HTTP 响应错误 400 或更大被视为无效。

属性 描述 必需
url 要请求的页面的完整 URL。 Web 服务器必须返回低于 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

测试一个字符串是否不为真,即 <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

测试是否已定义给定类型,以及是否可以加载其实现类。 类型包括任务、数据类型、脚本定义、宏定义和预设定义。

自 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

根据 SAX/JAXP 规范,通过尝试设置适当的属性/特性,测试 Ant 的 XML 解析器是否支持给定特性或属性

自 Apache Ant 1.7 起.

属性 描述 必需
property 要设置的属性 两者中只有一个
feature 要设置的特性
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 特定的无命名空间模式位置定义。

isreachable

使用 Java 5+ 网络 API 探测(远程)系统是否可达。 使用哪些探测机制正是 JVM 的实现特性。 它们可能包括 ICMP“ping”数据包、到端口 7“回显服务”的 UDP 或 TCP 连接或其他方式。

此条件将未知主机异常转换为 false 条件。 这是因为在笔记本电脑上,DNS 是网络出现故障时的第一个服务之一;您隐式地处于脱机状态。

如果提供 URL 而不是 host,则会提取主机名并在测试中使用——URL 的所有其他部分都会被丢弃。

测试可能无法通过防火墙工作,也就是说,可以使用 HTTP 等协议访问某些内容,而底层 ICMP 数据包会丢失。 同样,主机可能通过 ICMP 检测到可达,但在其他端口(即端口 80)上不可达,因为防火墙。

自 Apache Ant 1.7 起.

属性 描述 必需
host 要检查的主机 两者中只有一个
url 包含主机名的 URL
timeout 超时(以秒为单位) 否;默认值为 30
<condition property="offline">
  <isreachable url="https://ibiblio.org/maven/"/>
</condition>

探测 Maven 存储库是否可达。

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

使用主机名探测 Maven 存储库是否可达,超时时间为 10 秒。

length

自 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。