Ant :Property

Ant Propertyhtml

 

 

properties是由key-value组成的集合,就是Java中的Properties集合。属性的定义使用的是<property>。一般状况下,property值一经设置,就不能再改变了。Property是全局范围的properties中的一个元素,因此每一个property都是全局的,是能够被任何的targettask使用。java

 

Ant内置的属性

系统属性

AntJava程序的系统属性作了支持,能够直接的访问系统属性:apache

<project default="showSystemProperties">网络

    <target name="showSystemProperties">app

       <echo>${java.version}</echo>ide

       <echo>${java.vendor}</echo>测试

       <echo>${java.vendor.url}</echo>ui

       <echo>${java.home}</echo>this

       <echo>${java.vm.specification.version}</echo>url

       <echo>${java.vm.specification.vendor}</echo>

       <echo>${java.vm.specification.name}</echo>

       <echo>${java.vm.version}</echo>

       <echo>${java.vm.vendor}</echo>

       <echo>${java.vm.name}</echo>

       <echo>${java.specification.version}</echo>

       <echo>${java.specification.vendor}</echo>

       <echo>${java.specification.name}</echo>

       <echo>${java.class.version}</echo>

       <echo>${java.class.path}</echo>

       <echo>${java.library.path}</echo>

       <echo>${java.io.tmpdir}</echo>

       <echo>${java.compiler}</echo>

       <echo>${java.ext.dirs}</echo>

       <echo>${os.name}</echo>

       <echo>${os.arch}</echo>

       <echo>${os.version}</echo>

       <echo>${file.separator}</echo>

       <echo>${path.separator}</echo>

       <echo>${line.separator}</echo>

       <echo>${user.name}</echo>

       <echo>${user.home}</echo>

       <echo>${user.dir}</echo>

    </target>

</project>

 

Ant附加的属性

 



basedir             the absolute path of the project's basedir (as set
                    with the basedir attribute of <project>).
ant.file            the absolute path of the buildfile.
ant.version         the version of Ant
ant.project.name    the name of the project that is currently executing;
                    it is set in the name attribute of <project>.
ant.project.default-target
                    the name of the currently executing project's
                    default target;  it is set via the default
                    attribute of <project>.
ant.project.invoked-targets
                    a comma separated list of the targets that have
                    been specified on the command line (the IDE,
                    an <ant> task ...) when invoking the current
                    project.
                    This property is set properly when the first target is executed.
                    If you use it in the implicit target (directly
                    under the <project> tag) the list will be
                    empty if no target has been specified while it
                    will contain the project's default target in this
                    case for tasks nested into targets..
ant.java.version    the JVM version Ant detected; currently it can hold
                    the values "1.9", "1.8",
                    "1.7", "1.6", "1.5",
                    "1.4", "1.3" and
                    "1.2".  ant.core.lib the absolute path
                    of the  file.ant.jar
ant.home            home directory of Ant
ant.library.dir     the directory that has been used to load Ant's
                    jars from.  In most cases this is ANT_HOME/lib.

 

 

 

 

    <target name="showAntBuildInProperties">

       <echo>${basedir}</echo>

       <echo>${ant.file}</echo>

       <echo>${ant.version}</echo>

       <echo>${ant.project.name}</echo>

       <echo>${ant.project.default-target}</echo>

       <echo>${ant.project.invoked-targets}</echo>

       <echo>${ant.java.version}</echo>

       <echo>${ant.home}</echo>

       <echo>${ant.library.dir}</echo>

    </target>

执行结果:

showAntBuildInProperties:

     [echo] D:\Ant_Test\task

     [echo] D:\Ant_Test\task\build.xml

     [echo] Apache Ant(TM) version 1.9.4 compiled on April 29 2014

     [echo] ${ant.project.name}

     [echo] showAntBuildInProperties

     [echo] showAntBuildInProperties

     [echo] 1.7

     [echo] E:\Program Files\apache\ant\apache-ant-1.9.4

     [echo] E:\Program Files\apache\ant\apache-ant-1.9.4\lib

 

 

 

 

自定义Property

build.xml中可使用<property>来自定义属性。属性一经设置,将不可改变。

共有7种方式能够设置属性:

·

 

Attribute

Description

Required

name

属性名

No

value

属性值

One of these or nested text, when using the name attribute

location

Sets the property to the absolute filename of the given file.

If the value of this attribute is an absolute path,

it is left unchanged (with / and \ characters converted to the current platforms conventions).

Otherwise it is taken as a path relative to the project's basedir and expanded.

refid

Reference to an object defined elsewhere.

Only yields reasonable results for references toPATH like structures or properties.

resource

the name of the classpath resource containing properties settings in properties file format.

One of these, whennot using the name attribute

file

the location of the properties file to load.

url

a url containing properties-format settings.

environment

the prefix to use when retrieving environment variables.

Thus if you specify environment="myenv" you will be able to

access OS-specific environment variables via property names "myenv.PATH" or "myenv.TERM".

Note that if you supply a property name with a final "." it will not be doubled;

i.e. environment="myenv." will still allow access of environment variables

through "myenv.PATH" and "myenv.TERM".

This functionality is currently only implemented on select platforms.

Feel free to send patches to increase the number of platforms on which this functionality is supported ;).
Note also that properties are case-sensitive,

even if the environment variables on your operating system are not;

e.g. Windows 2000's system path variable is set to an Ant property named "env.Path" rather than "env.PATH".

classpath

the classpath to use when looking up a resource.

No

classpathref

the classpath to use when looking up a resource,

given as reference to a <path> defined elsewhere..

No

prefix

Prefix to apply to properties loaded using 

file, resource, or url. A "." is appended to the prefix if not specified.

No

prefixValues

Whether to apply the prefix when expanding the right hand side of

properties loaded using file,resource, or url. Since Ant 1.8.2

No (default=false)

relative

If set to true the relative path to basedir is set. Since Ant 1.8.0

No (default=false)

basedir

The basedir to calculate the relative path from. Since Ant 1.8.0

No (default=${basedir})

 

 

Property实际上是一种特殊的task,它的做用就是为变量设置值,也能够理解为定义变量。可是我没有将其放在task一节中,是由于它是一种提供值的经常使用方式。

Ant构建文件中,有7种方式能够设置property

 

1)指定name,以及value或者location的方式

<property name=”xxx” value=”” />或者<property name=”xxx” location=”” />

 

若是是value,则是直接设置为字面量。若是是location,则表示该值是一个文件系统上的一个路径,能够设置为绝对路径,也能够设置为相对路径。

 

示例:

<project default="main">

      

       <target name="main" depends="showSimpleProperty" />

 

       <property name="test.ant.property.useValue" value="hello, ant, property, value" />

       <property name="test.ant.property.useLocation.absoulte" location="c:/hello"/>

       <property name="test.ant.property.useLocation.relative" location="."/>

 

       <target name="showSimpleProperty">

              <echo>${test.ant.property.useValue}</echo>

              <echo>${test.ant.property.useLocation.absoulte}</echo>

              <echo>${test.ant.property.useLocation.relative}</echo>

       </target>

      

</project>

 

结果:

showSimpleProperty:

     [echo] hello, ant, property, value

     [echo] c:\hello

     [echo] D:\Projects\ant_test\property

 

main:

 

BUILD SUCCESSFUL

Total time: 0 seconds

 

 

2)指定name并以及嵌入文本的方式

<property name=”xxx”>your text value</property>

 

3)指定namerefid

示例:

<property id="test.ant.property.text"

              name="test.ant.property.text">your text value</property>

       <target name="showTextProperty">

              <echo>${test.ant.property.text}</echo>

       </target>

 

       <property name="test.ant.property.refid" refid="test.ant.property.text" />

       <target name="showRefidProperty">

              <echo>${test.ant.property.refid}</echo>

       </target>

以前已提到过,每一个task都有一个idproperty是一种特殊的task,因此也能够为它设置id属性。

 

4)指定file属性来设置多个Property

Java中两种文件一般做为配置文件:xmlpropertiesAnt也对properties文件提供了支持。

属性文件能够放在本地文件系统中,能够是网络上某个主机里,也能够是在当前classpath下。针对这几种状况,ant都作了支持。分别经过指定fileurlresource来加载属性文件。

     另外,在使用这三种方式(file,url,resource)时,能够指定前缀prefix的。默认状况下是没有前缀的,也就是,定义的变量仍然属性文件中的变量名。若是指定了前缀,就是定义了这样的变量(前缀.属性名)。

file属性是指定本地文件的路径,能够是绝对路径,也能够是相对路径

 

实例:

属性文件以下:

test.ant.property.propertiesFile.A=hello a

test.ant.property.propertiesFile.B=hello b

test.ant.property.propertiesFile.C=hello c

test.ant.property.propertiesFile.D=hello d

test.ant.property.propertiesFile.E=hello e

 

使用<property file/>设置属性:

       <property file="./build.properties" />

       <target name="showFileProperty">

              <echo>${test.ant.property.propertiesFile.A}</echo>                        <echo>${test.ant.property.propertiesFile.B}</echo>

              <echo>${test.ant.property.propertiesFile.C}</echo>

              <echo>${test.ant.property.propertiesFile.D}</echo>

       </target>

 

结果以下:

 

showFileProperty:

     [echo] hello a

     [echo] hello b

     [echo] hello c

     [echo] hello d

 

 

5)指定URL,经过网络资源来配置

 

将上面的脚本作以下调整便可测试:

       <!--

       <property file="./build.properties" />

       -->

       <target name="showFileProperty">

              <echo>${test.ant.property.propertiesFile.A}</echo>                        <echo>${test.ant.property.propertiesFile.B}</echo>

              <echo>${test.ant.property.propertiesFile.C}</echo>

              <echo>${test.ant.property.propertiesFile.D}</echo>

       </target>

 

       <property url="file:///D:/Projects/ant_test/property/build.properties" />

       <target name="showUrlProperty" depends="showFileProperty" />

 

6)指定resource ,加载classpath下属性文件

若是属性文件放在指定的classpath下,能够经过使用resource来指定属性文件位置。

默认是当前路径下。也就是说在使用resource时,若是指定了classpath属性,则从指定的classpath下加载,若是没有指定,则从当前classpath下加载。

       根据上面的说明,能够知道resource是和classpath(或者classpathref)结合使用的。

因此使用resource时,能够是下面三种形式:

<property resource=”xxxx” />

<property resource=”xxxx” classpath=”yyyy” />

<property resource=”xxxx” classpathref=”yyyy” />

 

7)将环境变量做为property使用

使用方法是:<property environment=”env” />

这样就是将环境变量做为属性加载的。加载的变量名是:env.XXX。例如环境变量中的PATHJAVA_HOME,加载后的变量名是:env.JAVA_HOMEenv.PATH

 

       <property environment="env"/>

       <target name="showEnvironmentProperty">

              <echo>${env.JAVA_HOME}</echo>

       </target>

相关文章
相关标签/搜索