在项目中设置一个属性(通过名称和值),或一组属性(来自文件或资源)。属性区分大小写。
属性是不可变的:第一个设置属性的人会将其冻结以供构建的其余部分使用;它们绝对不是变量。
有七种方法可以设置属性
java.util.Properties
类中使用的文件定义的格式,并具有相同的规则,说明如何转义非 ISO-8859-1 字符。java.util.Properties
类中使用的文件定义的格式的文件。prefix.availableProcessors
、prefix.freeMemory
、prefix.totalMemory
和prefix.maxMemory
,其值由Runtime类的相应方法返回。虽然可以组合使用这些方法,但一次只应使用一种方法。例如,可能会出现有关设置属性的顺序的问题。
正在设置的属性的值部分可能包含对其他属性的引用。这些引用在设置这些属性时解析。这也适用于从属性文件加载的属性。
可以在此处找到预定义属性的列表。
自 Apache Ant 1.8.0 起,可以在 Java 5+ 上运行时,根据Sun DTD加载在 XML 中定义的属性。为此,文件、资源或 URL 的名称必须以.xml结尾。
属性 | 描述 | 必需 |
---|---|---|
name | 要设置的属性的名称。 | 否 |
value | 属性的值。 | 当设置了name属性时,这些属性之一或嵌套文本 |
location | 将属性设置为给定文件的绝对文件名。如果此属性的值是绝对路径,则保持不变(将/和 \字符转换为当前平台的约定)。否则,它将被视为相对于项目的basedir的路径并进行扩展。 |
|
refid | 对在其他地方定义的对象的引用。仅对对类似路径的结构或属性的引用产生合理的结果。 | |
resource | 包含属性文件格式的属性设置的类路径资源的名称。 | 这些属性之一,**除非**设置了name属性 |
file | 要加载的属性文件的位置。 | |
url | 包含属性格式设置的 URL。 | |
environment | 检索环境变量时要使用的前缀。因此,如果您指定environment=myenv,您将能够通过属性名称 myenv.PATH 或myenv.TERM 访问特定于操作系统的环境变量。请注意,如果您提供一个以.结尾的属性name,它不会加倍;即environment= myenv.仍然允许通过 myenv.PATH 和myenv.TERM 访问环境变量。此功能目前仅在某些平台上实现。请随时发送补丁以增加支持此功能的平台数量 ;-)。另请注意,属性区分大小写,即使您操作系统上的环境变量不区分大小写;例如,Windows 2000 或更高版本系统路径变量设置为名为 env.Path 而不是env.PATH 的 Ant 属性。 |
|
runtime | 检索运行时属性时要使用的前缀。因此,如果您指定runtime=myrt,您将能够通过属性名称 myrt.availableProcessors 、myrt.maxMemory 、myrt.totalMemory 或myrt.freeMemory 访问与Runtime类中的方法相对应的运行时值。请注意,如果您提供一个以.结尾的属性名称,它不会加倍;即runtime= myrt.仍然允许访问运行时属性,例如 myrt.maxMemory 。另请注意,属性值是在执行 property 时获取的快照。自 Ant 1.10.4 起 |
|
classpath | 查找资源时要使用的类路径。 | 否 |
classpathref | 查找资源时要使用的类路径,以对在其他地方定义的<path> 的引用形式给出。 |
否 |
prefix | 应用于使用file、resource或url加载的属性的前缀。如果未指定,则会在前缀后附加一个.。 |
否 |
prefixValues | 是否在扩展使用file、resource或url加载的属性的右侧时应用前缀。自 Ant 1.8.2 起 | 否;默认值为false |
relative | 如果设置为true,则设置相对于basedir的相对路径。自 Ant 1.8.0 起 |
否;默认值为false |
basedir | 用于计算相对路径的basedir。自 Ant 1.8.0 起 | 否;默认值为项目的basedir |
使用environment属性,此任务将加载 OpenVMS 系统上定义的所有逻辑。具有多个等效名称的逻辑将映射到一个属性,该属性的值是所有等效名称的逗号分隔列表。如果逻辑在多个表中定义,则仅提供最本地定义(表优先级顺序为 PROCESS、JOB、GROUP、SYSTEM)。
自 Ant 1.8.2 起,如果 Ant 检测到它在 Java 5 或更高版本上运行,Ant 将使用System.getenv()
而不是它自己的操作系统相关本机实现。对于某些操作系统,这会导致与 Ant 的旧版本相比存在细微差异。有关完整列表,请参阅Bugzilla 问题 49366。特别是
PROMPT
)不再存在。BEGINLIBPATH
变量。Property
的classpath属性是类似路径的结构,也可以通过嵌套的classpath
元素设置。
将属性foo.dist
设置为值dist
。
<property name="foo.dist" value="dist"/>
将属性foo.dist
设置为值dist
。
<property name="foo.dist">dist</property>
从名为foo.properties的文件中读取一组属性。
<property file="foo.properties"/>
从地址https://www.mysite.com/bla/props/foo.properties读取一组属性。
<property url="https://www.mysite.com/bla/props/foo.properties"/>
从名为foo.properties的资源中读取一组属性。
<property resource="foo.properties"/>
请注意,您可以使用以下方法为所有 Ant 构建引用全局属性文件
<property file="${user.home}/.ant-global.properties"/>
因为user.home
属性由 JVM 定义为您的主目录。user.home
属性在文件系统中解析的位置取决于操作系统版本和 JVM 实现。在基于 Unix 的系统上,这将映射到用户的 home 目录。在现代 Windows 变体上,这很可能解析到用户在Documents and Settings或Users文件夹中的目录。较旧的 Windows 变体(如 Windows 98/ME)不太可预测,其他操作系统/JVM 组合也是如此。
读取系统环境变量并将它们存储在属性中,以env
为前缀。请注意,这仅在某些操作系统上有效。显示了两个值的回显。
<property environment="env"/> <echo message="Number of Processors = ${env.NUMBER_OF_PROCESSORS}"/> <echo message="ANT_HOME is set to = ${env.ANT_HOME}"/>
此构建文件使用build.properties中定义的属性。关于环境变量STAGE
,某些或所有值都可能被覆盖,例如,如果STAGE=test
并且有一个test.properties,则您将拥有该变量的特殊值(例如,测试服务器的另一个名称)。最后,所有这些值都可能被每个用户的个人设置文件覆盖。
<property environment="env"/> <property file="${user.name}.properties"/> <property file="${env.STAGE}.properties"/> <property file="build.properties"/>
将相对路径存储在foo
中:../my/file.txt
<property name="foo" location="my/file.txt" relative="true" basedir=".."/>
将相对路径存储在foo
中:cvs/my/file.txt
<property name="foo" location="my/file.txt" relative="true" basedir="cvs"/>
如前所述,此任务将加载存储在文件系统中的属性文件,或作为类路径上的资源。以下是一些关于此功能的有趣事实
\u0456
或\"
样式转义它们。true。
文件内属性扩展非常酷。学习使用它。
示例
build.compiler=jikes deploy.server=lucky deploy.port=8443 deploy.url=https://${deploy.server}:${deploy.port}/
当 Ant 开始支持从环境变量设置属性时,它在 Java 1.2 上运行,其中System.getEnv
不起作用。因此,我们决定在一个新进程中启动一个命令,该命令打印环境变量,分析输出并创建属性。在 Ant 1.9.0 中,当我们开始要求 Java 5 时,我们切换回System.getEnv
,即使它在某些平台上返回了不同的结果。下面描述的命令仍然在 OpenVMS 上使用,或者如果System.getEnv
抛出异常。
在Execute.java(方法getProcEnvCommand()
)中实现了以下操作系统的命令
操作系统 | 命令 |
---|---|
os/2 | cmd /c set |
windows | |
* win9x | command.com /c set |
* 其他 | cmd /c set |
z/os | /bin/env **或** /usr/bin/env **或** env (取决于读取权限) |
unix | /bin/env **或** /usr/bin/env **或** env (取决于读取权限) |
netware | env |
os/400 | env |
openvms | show logical |