条件是 <condition>
和 <waitfor>
任务的嵌套元素。 存在核心条件和自定义条件。 自定义条件在 自定义条件 中描述。 核心条件在下面描述。
这些是可以在 <condition>
和 <waitfor>
任务中用作条件的嵌套元素。
<not>
元素期望将正好一个其他条件嵌套到此元素中,从而否定该条件的结果。 它没有任何属性,并且接受条件任务的所有嵌套元素作为嵌套元素。
<and>
元素没有任何属性,并且接受任意数量的条件作为嵌套元素——支持条件任务的所有嵌套元素。 如果其包含的所有条件都为真,则此条件为真,条件将在构建文件中指定的顺序进行评估。
<and>
条件具有与 Java &&
运算符相同的快捷语义,一旦嵌套条件之一为假,就不会评估其他条件。
<or>
元素没有任何属性,并且接受任意数量的条件作为嵌套元素——支持条件任务的所有嵌套元素。 如果其包含的条件中至少有一个为真,则此条件为真,条件将在构建文件中指定的顺序进行评估。
<or>
条件具有与 Java ||
运算符相同的快捷语义,一旦嵌套条件之一为真,就不会评估其他条件。
<xor>
元素对所有嵌套元素执行异或运算,类似于 Java 中的 ^
运算符。 只有当奇数个嵌套条件为真时,它才评估为真。 与 <and>
和 <or>
测试不同,没有评估的快捷方式。 它没有任何属性,并且接受条件任务的所有嵌套元素作为嵌套元素。
此条件与 Available 任务相同,支持该任务的所有属性和嵌套元素,属性和值属性是多余的,将被忽略。
此条件与 Uptodate 任务相同,支持该任务的所有属性和嵌套元素,属性和值属性是多余的,将被忽略。
测试当前操作系统是否为给定类型。 测试每个定义的属性,并且只有在所有测试都成功时,结果才为真。
属性 | 描述 | 必需 |
---|---|---|
family | 要期望的操作系统系列的名称。 | 否 |
name | 要期望的操作系统的名称。 | 否 |
arch | 要期望的操作系统的体系结构。 | 否 |
version | 要期望的操作系统的版本。 | 否 |
family 属性支持的值为
windows——适用于所有版本的 Microsoft Windows
dos——适用于所有基于 Microsoft DOS 的操作系统,包括 Microsoft Windows 和 OS/2
mac——适用于 Mac OS X 之前的 Apple Macintosh 系统
unix——适用于所有 Unix(-like) 操作系统,包括 Linux 和 Mac OS X/macOS
netware——适用于 Novell NetWare
os/2——适用于 OS/2
tandem——适用于 HP 的 NonStop 内核,以前称为 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 任务相同,支持该任务的所有属性和嵌套元素,属性和覆盖属性是多余的,将被忽略。
http
条件检查指定 URL 的 Web 服务器是否返回有效响应。 默认情况下,HTTP 响应错误 400 或更大被视为无效。
属性 | 描述 | 必需 |
---|---|---|
url | 要请求的页面的完整 URL。 Web 服务器必须返回低于 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"/>
测试一个字符串是否不为真,即 <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>
测试是否已定义给定类型,以及是否可以加载其实现类。 类型包括任务、数据类型、脚本定义、宏定义和预设定义。
自 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
。
根据 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 特定的无命名空间模式位置定义。
使用 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 秒。
自 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。