Ant :Property

properties是由key-value组成的集合,就是Java中的Properties集合。属性的定义使用的是<property>。通常情况下,property值一经设置,就不能再改变了。Property是全局范围的properties中的一个元素,所以每个property都是全局的,是可以被任何的target、task使用。

Ant内置的属性

系统属性

Ant对Java程序的系统属性做了支持,可以直接的访问系统属性:

<project default="showSystemProperties">

<target name="showSystemProperties">

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

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

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

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

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

<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 ant.jar file.
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

fileresource, 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 urlSince
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)指定name,refid

示例:

<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都有一个id,property是一种特殊的task,所以也可以为它设置id属性。

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

Java中两种文件通常作为配置文件:xml、properties。Ant也对properties文件提供了支持。

属性文件可以放在本地文件系统中,可以是网络上某个主机里,也可以是在当前classpath下。针对这几种情况,ant都做了支持。分别通过指定file,url,resource来加载属性文件。

另外,在使用这三种方式(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。例如环境变量中的PATH、JAVA_HOME,加载后的变量名是:env.JAVA_HOME,env.PATH。

<property
environment="env"/>

<target
name="showEnvironmentProperty">

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

</target>

Ant :Property的更多相关文章

  1. Cesium原理篇:Property

    之前主要是Entity的一个大概流程,本文主要介绍Cesium的属性,比如defineProperties,Property(ConstantProperty,CallbackProperty,Con ...

  2. python面对对象编程-------5:获取属性的四种办法:@property, __setattr__(__getattr__) ,descriptor

    一:最基本的属性操作 class Generic: pass g= Generic() >>> g.attribute= "value" #创建属性并赋值 > ...

  3. OC中两个关键字的作用:@property和@synthesize

    两个关键字的使用:@property和@synthesize 一.@property关键字这个关键字是OC中能够快速的定义一个属性的方式,而且他可以设置一些值,就可以达到一定的效果,比如引用计数的问题 ...

  4. python对象属性管理(2):property管理属性

    使用Property管理属性 python提供了一种友好的getter.setter.deleter类方法的属性管理工具:property. property()是一个内置函数,它返回一个Proper ...

  5. 搭建Turbine时,报错误:Property or field 'default' cannot be found on object of type 'com.netflix.appinfo.InstanceInfo'

    Spring Boot + Eureka Server + Hystrix with Turbine: empty turbine.stream 配置的时候遇到了问题: Property or fie ...

  6. spring property标签中的 ref属性和ref 标签有什么不同? 如下:<property name="a" ref="b" />

    spring property标签中的 ref属性和ref 标签有什么不同? 如下:<property name="a" ref="b" /> sp ...

  7. Python进阶:@property 动态属性

    Python进阶:@property 动态属性 Python 动态属性的概念可能会被面试问到,在项目当中也非常实用,但是在一般的编程教程中不会提到,可以进修一下. 先看一个简单的例子.创建一个 Stu ...

  8. spring boot 2.0.0 + mybatis 报:Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

    spring boot 2.0.0 + mybatis 报:Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required 无法启动 ...

  9. 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter

    上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一.    案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...

随机推荐

  1. JS详细教程(下)

    五.数组 数组是数据的有序列表,每个元素在数组中都有数字位置编号,也就是索引.JS中的数组是弱类型,每一项都可以保存任何类型的数据. 创建数组 ①使用Array构造函数 var arr=new Arr ...

  2. ZOJ Problem Set - 1392 The Hardest Problem Ever

    放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...

  3. struts2学习笔记--使用Validator校验数据

    我们在进行一些操作是需要对用户的输入数据进行验证,比如网站的注册,需要对各个数据项进行数据校验,Struts2提供了一些默认的校验器,比如数字的检测,邮箱的检测,字符串长度的检测等等. 常用的Vali ...

  4. PHP连接SQL Server相关配置及说明

     关于php怎么连接数据库,大家肯定有不同的看法,有的用wamp,有的用xamp,他们都是集成环境,方便操作.但有时,数据库的类型不同,要连接不同的数据库.今天和大家分享一下如何连接sql2000,服 ...

  5. Android学习笔记之ListView复用机制

    PS:满打满算,差不多三个月没写博客了...前一阵忙的不可开交...总算是可以抽出时间研究研究其他事情了... 学习内容: 1.ListView的复用机制 2.ViewHolder的概念 1.List ...

  6. 【Win10开发】Toast通知——前台激活

    上篇文章我们将了大体的Toast通知的模板及实例展示,那么,这篇文章就来讲讲Toast的前台激活. 首先是xaml界面,很简单,我们放一个Button和TextBlock,TextBlock用来显示T ...

  7. ReSharper.8.0.14.856注册码

    ReSharper.8.0.14.856注册码 用户名:ronle 注册码:ZoJzmeVBoAv9Sskw76emgksMMFiLn4NM 网络转载

  8. Oracle函数-DECODE

    DECODE翻译为解码或译码,因为它可以把查询结果翻译成令用户容易理解的内容. 语法: expr: 表达式 search:搜索值 result:结果值 default:默认值 DECODE函数的第一个 ...

  9. Ehcache 缓存使用

    在开发高并发量,高性能的网站应用系统时,缓存Cache起到了非常重要的作用.本文主要介绍EHCache的使用,以及使用EHCache的实践经验. 笔者使用过多种基于Java的开源Cache组件,其中包 ...

  10. JAVA collection集合之 扑克牌游戏

    主要内容:这里使用collection集合,模拟香港电影中大佬们玩的扑克牌游戏. 1.游戏规则:两个玩家每人手中发两张牌,进行比较.比较每个玩家手中牌最大的点数,大小由A-2,点数大者获胜.如果点数相 ...