ant的特性

1)ant的内建特性
ant有一些内建的特性如:
ant.file-->构建文件如build.xml文件所在的路径
ant.home->ant的根路径
ant.java.version->java版本
ant.project.name->当前project的名字,在build.xml的开头指定
ant.version->ant版本
basedir->project的根路径,在build.xml的开头指定
<target name="echo">
<echo message="ant.file = ${ant.file}"/>
<echo message="ant.home = ${ant.home}"/> 
<echo message="ant.java.version = ${ant.java.version}"/> 
<echo message="ant.project.name = ${ant.project.name}"/> 
<echo message="ant.version = ${ant.version}"/> 
<echo message="basedir = ${basedir}"/> 
</target>
所有jvm系统的特性都隐式的成为ant特性,并允许用户对一些重要信息诸如用户的主目录以及用户名称等进行修改。
例如:
<echo message="user.name = ${user.name}"/> 
<echo message="user.home = ${user.home}"/> 
<echo message="java.home = ${java.home}"/>  
将得到:
      [echo] user.name = lcheng
     [echo] user.home = C:\Documents and Settings\lcheng
     [echo] java.home = C:\Program Files\Java\jdk1.5.0_08\jre
2)用户自己设置特性
最常用的自定义特性有几种:
(1)name/value特性
   其格式为<property name="..." value="..."/>
   引用相对路径的特性最好使用location变量设置,如:
   <property name="builddir" location=${build.dir} />
   (2)从文件中载入特性集
假设我们已经有一个文件名为build.properties, 内容如下:
name=Allen
user=admin
password=qqqqq

我们在 Ant 的 build.xml 构建文件中直接调用并使用它们。
<?xml version="1.0" encoding="UTF-8"?>
<project name="testCondition" default="test">
<property file="build.properties"/>
    <target name="test">
        <echo message="name = ${name}"/>
        <echo message="user = ${user}"/> 
        <echo message="password = ${password}"/> 
    </target>
</project>

运行,结果如下:

C:\testant>ant -f build1.xml
Buildfile: C:\testant\build1.xml

test:
     [echo] name = Allen
     [echo] user = admin
     [echo] password = qqqqq

BUILD SUCCESSFUL
Total time: 0 seconds

 
(3)载入环境变量
      另一个重要的property变量允许将环境变量作为特性。需要加入类似于下面这句话
<property environment="env" />
env表示环境变量的前缀,这个可以自己设置值。
     那么在引用环境变量的时候输入${env.Path} ${env.CLASSPATH},注意环境变量是大小写敏感的。
 
<?xml version="1.0" encoding="UTF-8"?>
<project name="testCondition" default="test">
<property environment="env" />
    <target name="test">
        <echo message="env.Path = ${env.Path}"/>
        <echo message="env.JAVA_HOME = ${env.JAVA_HOME}"/> 
    </target>
</project>

结果:

C:\testant>ant -f build1.xml
Buildfile: C:\testant\build1.xml

test:
     [echo] env.Path = C:\Program Files (x86)\Common Files\NetSarang; C:\Program Files (x86)\Common Files\Microsoft Shared\Windows;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program File;C:\Program Files\Java\jdk1.6.0_21\bin;C:\Program Files (x86)\Windows

    [echo] env.JAVA_HOME = C:\Program Files\Java\jdk1.6.0_21

BUILD SUCCESSFUL
Total time: 0 seconds

 
(4)从xml文件中载入特性。
     其格式为<xmlproperty file="${customer}.xml"/>
    例如web.xml文件的内容如下:
   
<?xml version="1.0"?>
<customer name="zhangsan">
    <sex>female</sex>
    <age>27</age>
</customer>
    build.xml 如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="testCondition">
    <property environment="env"/>
    <target name="test">
        <xmlproperty file="${customer}.xml" collapseAttributes="true"/>
        <echo message="${customer.name},${customer.sex},${customer.age}"/>
    </target>
</project>
   运行 ant test -Dcustomer=web
   得到的结果则是:zhangsan,female,27
   
C:\testant>ant -f build1.xml -Dcustomer=web
Buildfile: C:\testant\build1.xml

test:
     [echo] zhangsan,female,27

BUILD SUCCESSFUL
Total time: 0 seconds
如果 web.xml 改为:
<?xml version="1.0"?>
<customer name="zhangsan">
    <sex>female</sex>
    <age>27</age>
    <sex>male</sex>
    <age>32</age>
</customer>

则结果变为

C:\testant>ant -f build1.xml test -Dcustomer=web
Buildfile: C:\testant\build1.xml

test:
     [echo] zhangsan,female,male,27,32

BUILD SUCCESSFUL
Total time: 0 seconds

我们把 web.xml 再次改为
<?xml version="1.0"?>
<customers>
    <customer name="zhangsan">
        <sex>female</sex>
        <age>27</age>
    </customer>
    <customer name="lisi">
        <sex>male</sex>
        <age>32</age>
    </customer>
</customers>

build1.xml 改为

<?xml version="1.0" encoding="UTF-8"?>
<project name="testCondition">
    <property environment="env"/>
    <target name="test">
        <xmlproperty file="${customer}.xml" collapseAttributes="true"/>
        <echo message="${customers.customer.name}, ${customers.customer.sex}, ${customers.customer.age}"/>
    </target>
</project>

运行:

  ant -f build1.xml test -Dcustomer=web

结果:

C:\testant>ant -f build1.xml test -Dcustomer=web
Buildfile: C:\testant\build1.xml

test:
     [echo] zhangsan,lisi, female,male, 27,32

BUILD SUCCESSFUL
Total time: 0 seconds

 
   也可以通过import的方法来输入xml文件,此时xml文件的内容就像宏定义一样被嵌入。被import的xml文件必须是一个构建文件,以构建文件的格式书写。
 
注意:特性值一旦设定,则无论在构建文件中还是在命令行里都不能修改它的值。最先设值者设值时就固定了它的值。
例如下面这段代码
   在文件build.properties中有这样一句话
   build.debug=off
   在构建文件中
   <property file="build.properties"/>
   <property name="build.debug" value="on"/>
   <echo message="build.debug = ${build.debug}" />
   其输出的结果是build.debug = off。
   这是因为特性build.debug首先在build.properties中设定了。
   我们也可以通过在命令行中首先输入一些特性来设定特性值,这样将会覆盖构建文件中所设定的特性值。
posted @ 2013-01-05 23:18  allenbackpacker  阅读(1124)  评论(0编辑  收藏  举报