Ant data :Property

  •  Properties

    • Ant 内置的Property

      • 系统属性
      • Ant附加的属性
    • 自定义Property

Ant DataType:Properties

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>

时间: 2024-11-13 15:15:17

Ant data :Property的相关文章

【学术报告】【2015-05-08】Big Data:A Practitioner&#39;s Perspective

应本科母校数计学院院长陈明玉老师的邀请,下周五(2015年5月8日),将回泉州师范学院作一个学术报告,对大数据相关的技术.应用.八卦作一个相对全面和完整的介绍. 希望感兴趣的老师和同学们参加.以下是相关poster. [学术报告][2015-05-08]Big Data:A Practitioner's Perspective

Error解决:Property&#39;s synthesized getter follows Cocoa naming convention for returning &#39;owned&#39;

在项目中定义了以new开头的textField,结果报错: 先看我的源码: #import <UIKit/UIKit.h> @interface ResetPasswordViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *phoneTextField; @property (weak, nonatomic) IBOutlet UITextField *oldPasswordTe

配置Spring Security 错误:Property or field &#39;ROLE_USER&#39; cannot be found

在学习http://www.mkyong.com/spring-security/spring-security-hello-world-example/时,出现以下错误: Property or field 'ROLE_USER' cannot be found on object of type 'org.springframework.security.web.access.expression. 经查发现把 <security:http auto-config="true"

[email&#160;protected]属性的使用及注意问题:@property(assign)int name;

 句型:@property(assign)int name: 分析(公式):@property(assign)int name = 实例_name + 存储方法setName + 取值方法getName. 注意:在实现方法中同时自定义(或重写)setName.getName方法时,需要加上@synthesize name:即对变量实例化一下. @property属性的的好处:可以在主函数中使用点语法:在实现文件中可以添加自定义的筛选条件,比如如果输入的学生年龄<0,则会提示请重新输入正确的年

iOS编译错误:Property cannot have array or function type &#39;Block&#39; (aka &#39;void (XXXXView *__st

XXXXView 中的Block错误,原因: typedef void (^Block)(XXXXView *); 在这个demo中忘记写^了,导致此错误 iOS编译错误:Property cannot have array or function type 'Block' (aka 'void (XXXXView *__st

spring boot 2.0.0 + mybatis 报:Property &#39;sqlSessionFactory&#39; or &#39;sqlSessionTemplate&#39; are required

spring boot 2.0.0 + mybatis 报:Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required 无法启动 google baidu了一番,多数都提示缺少: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artif

从零开始,实现一个最简单的数据库:Property

因为自己对数据库了解不多,就只能走一步看一部了.先从模式(Schema)开始做起.但要做模式,就先要做属性(Property).所以先实现一个类Property. 我的Property很简单,只有3个比较重要的字段:属性名,取值类型(如整型.字符串),键类型(主键.外键). 在写这个类的时候,主要考虑2件事情:1,Property在内存中是怎么体现的,也就是这个类的字段:2,怎么保存到硬盘(metadata文件)中去. 下面仅把类的声明列出来,具体实现就算了,免得页面太凌乱.而且有凑字数之嫌.

MRC实现猜拳游戏(附:@property理解偏差纠正)

1 /* 猜拳游戏 2 对象1:人, 属性:输入要出的拳并显示,分数,姓名 3 对象2:Bot,属性同上,继承.自动生成出拳,枚举法.显示出拳,与传过来的人的出拳作比较,判定结果并输出分数. 4 其他:每比较一次提示是否继续. 5 6 注意:MRC! 7 */ 8 9 #import <Foundation/Foundation.h> 10 #import "Bot.h" 11 int main(int argc, const char * argv[]) 12 { 13

spring in action 学习十二:property placeholder 注解的方式实现避免注入外部属性硬代码化

这里的注解是指@PropertySource这个注解.用@PropertySource这个注解加载.properties文件. 案例的目录结构如下: student.properties的代码如下: 1 #用配置文件的形式,避免注入属性值的硬代码化. 2 name=AbrahamLincoln 3 age=21 Student的代码如下: 1 package com.advancedWiring.ambiguityIniAutowiring2; 2 3 import org.springfram