Ant Property

一、概述

        Property用于在project中设置属性,属性名区分大小写。属性值一旦设置完就不可再改变。属性是定制构建过程的一种重要方式,或者为在构建文件中重复使用的字符串提供快捷方式。通过在“${”和“}”之间放置属性值来支持在task的属性或者嵌套文本中使用,例如:有一个属性srcdir的值是/tmp,那么${srcdir}/classes在运行时会被解析为/tmp/classes。

二、设置方法

        有7种方式设置属性:
  1. 通过name和value或location属性。
  2. 通过name和嵌套文本。
  3. 通过name和refid属性。
  4. 通过将file属性设置为要加载的属性文件的文件名。文件格式为java.util.Properties中定义的格式,对于非ISO8859-1的转义也是如此。
  5. 通过将url属性设置为加载属性的url。该url必须指向一个具有由类java.util.Properties中所定义的格式的文件。
  6. 通过将resource属性设置为要加载的属性文件的文件名。该文件在当前的classpath或者指定的classpath中。
  7. 通过environment 属性设置环境变量的前缀。可通过前缀.变量名的方式访问一个环境变量。
        属性值的一部分可能包含对其他属性的引用,这些引用在属性被设置时解析,从文件中加载的属性也是如此。
        从Ant1.8.0开始可以从遵从SUN DTD的xml中加载属性,前提是jdk1.5以上并且文件名以.xml结尾。

三、简单示例

        通过value将属性message设置为“hello ant!”。
<property name="message" value="hello ant!"/>
        通过嵌套文本将属性message设置为“hello ant!”。
<property name="message" >hello ant!</property>
        通过refid设置other属性为“hello ant!”。
<property name="message" value="hello ant!" id="msg"/>
<property name="other" refid="msg"/>
        通过file从test.properties中读取属性
<property file="test.properties" />
        通过url从属性文件中读取属性
<property url="http://127.0.0.1:8080/path/to/file/test.properties" />
        通过resource从classpath中的test.properties中读取属性
<property resource="test.properties" />
        通过environment属性获取系统属性
<property environment="env"/>
<echo message="Number of Processors = ${env.NUMBER_OF_PROCESSORS}"/>
<echo message="ANT_HOME is set to = ${env.ANT_HOME}"/>
        假设project的绝对路径为C:\Users\runner
        通过location设置属性dir的值,relative为 true表示使用相对路径,相对路径以project的basedir为基础与property的basedir进行计算。dir值为相对于计算后的路径test.properties文件的位置,如下dir值为:runner\test\test.properties。property的basedir默认值为“.”,即当前目录。project的basedir默认值为构建文件所在的目录。
<property name="dir" location="test\test.properties" relative="true" basedir=".."/>
        而如下dir值为..\test\test.properties
<property name="dir" location="test\test.properties" relative="true" basedir="pro"/>
        relative默认值为false,当为false时basedir属性是无效的,只会返回绝对路径。如下dir值为C:\Users\runner\test\test.properties
<property name="dir" location="test\test.properties" />

四、内置属性

        Ant提供了对所有系统属性的访问就像它们已经用property定义了一样。例如${user.name}就是用户的账户名称。具体支持的系统属性可以查看java.lang.System的getProperties方法。
        此外还有一些内置属性
        basedir:project的基础目录的绝对路径,也就是project元素的basedir属性,默认值为当前构建文件的目录。
        ant.file:构建文件的绝对路径。
        ant.version:ant版本号。
        ant.project.name:project名称,即project的name属性值。
        ant.project.default-target:当前project执行时的默认target名称,即project的default属性。
        ant.project.invoked-targets:在命令行中执行当前project时,命令行中指定的逗号分隔的target列表。
        ant.java.version:ant检测到的jdk版本。
        ant.core.lib:ant.jar所在目录的绝对路径。
        ant.home:ant的主目录。
        ant.library.dir:加载ant的jar的路径。

五、Property扩展

        $$

        当Ant遇到 ${key}结构时,精确的语义分析取决配置的PropertyHelper委托类。在默认设定下,Ant会将 $$解析为 $,并且会立即停止文本的常规属性扩展机制。例如, $${key}扩展为 ${key}没有value,即使已经定义了一个名字为key值为value的属性。相当于转义字符 $
        例如,如果属性builddir的值为build/classes:
<echo>$${builddir}=${builddir}</echo>
        将会输出${builddir}=build/classes
        除了一个类似于属性的构造之外,一个单独的 $字符(包括大括号)将按字面意思解析。指定这个字符的正确方式是无条件的使用转义机制。所以通过4个 $可以得到2个 $。但是 $$$不要混用, $$$也会解析为 $$。简单写说,如果想要解析出 ${}结构的值, $应该为奇数个,否则为偶数个。

        嵌套括号

        在默认设定下,Ant不能解析嵌套的括号。在创建属性名时,只会到第一个遇到的右括号。例如,${a${b}},将会解析为两部分:a${b和第二个}。也就是说不能很容易的扩展属性名,但是有一些 变通的方法

        扩展属性名

        通过 ${toString:}获得引用的值。例如,获取fileset的文件列表。文件名按“;”分隔。
<fileset id="sourcefiles" dir="." includes="*.xml" />
<echo> sourcefiles = ${toString:sourcefiles} </echo>
        通过 ${ant.refid:}获得引用的值。例如,获取url的url属性值。
  <url url="http://ant.apache.org/" id="anturl"/>
  <echo>${ant.refid:anturl}</echo>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值