Apache Ant 提供了一个可选的任务来编辑属性文件。当需要对应用程序服务器和应用程序的配置文件进行无人值守的修改时,这非常有用。目前,该任务维护一个工作属性文件,并具有添加属性或更改现有属性的功能。从 Ant 1.8.0 开始,原始属性文件的注释和布局将被保留。
从 Ant 1.8.2 开始,原始文件的换行符样式也将被保留,只要使用的样式保持一致。一般来说,更新文件的换行符将与读取文件时遇到的第一个换行符相同。
属性 | 描述 | 必需 |
---|---|---|
file | 要编辑的属性文件的位置 | 是 |
comment | 文件本身的标题 | 否 |
jdkproperties | 使用 java.lang.Properties ,这将丢失文件的注释和布局。从 Ant 1.8.0 开始 |
否;默认值为 false |
布尔属性 jdkproperties 用于恢复任务的先前行为,在该行为中,属性文件中的布局和任何注释都将被任务丢失。
使用嵌套的 <entry>
元素来指定对属性文件本身的实际修改。
属性 | 描述 | 必需 |
---|---|---|
key | 属性名称/值对的名称 | 是 |
value | 要设置的值 (=),要添加的值 ( +) 或要减去的值 ( -) |
如果 operation 不是 del,则必须至少指定一个 |
default | 如果属性尚未在属性文件中定义,则要设置的属性的初始值。 对于类型 date,允许使用一个额外的关键字: now | |
type | 将值视为:int、 date或 string(默认) |
否;默认为 string |
operation | 以下操作之一 对于所有数据类型
|
否;默认为 = |
pattern | 仅适用于 int 和 date 类型。如果存在,值将根据需要进行解析和格式化。 | 否 |
unit | 要应用于 date +/ -操作的值的单位。有效值为
+/ -操作的 date 类型。 |
否;默认为 day |
设置属性值时使用的规则如下所示。操作在考虑这些规则之后发生。
以下更改 my.properties 文件。假设 my.properties 如下所示
# A string value akey=original value # The following is a counter, which will be incremented by 1 for # each time the build is run. anint=1
运行后,文件将如下所示
#My properties #Wed Aug 31 13:47:19 BST 2005 # A string value akey=avalue # The following is a counter, which will be incremented by 1 for # each time the build is run. anint=2 adate=2005/08/31 13\:47 formated.int=0014 formated.date=243 13\:47
斜杠符合 Properties 类的预期。文件将以一种方式存储,以便检查每个字符,并在必要时进行转义。
原始文件的布局和注释将被保留。新属性将添加到文件末尾。现有属性将就地覆盖。
<propertyfile file="my.properties" comment="My properties"> <entry key="akey" value="avalue"/> <entry key="adate" type="date" value="now"/> <entry key="anint" type="int" default="0" operation="+"/> <entry key="formated.int" type="int" default="0013" operation="+" pattern="0000"/> <entry key="formated.date" type="date" value="now" pattern="DDD HH:mm"/> </propertyfile>
要生成相对于今天的日期
<propertyfile file="my.properties" comment="My properties"> <entry key="formated.date-1" type="date" default="now" pattern="DDD" operation="-" value="1"/> <entry key="formated.tomorrow" type="date" default="now" pattern="DDD" operation="+" value="1"/> </propertyfile>
字符串的连接
<propertyfile file="my.properties" comment="My properties"> <entrykey="progress" default="" operation="+" value="."/> </propertyfile>
每次调用时,都会将一个 .
附加到 progress
将项目版本提升到下一个次要版本(增加次要版本并将 patch=0
)
<target name="nextMinorVersion"> <property name="header" value="##Generated file - do not modify!"/> <propertyfile file="version.properties" comment="${header}"> <entry key="product.build.major" type="int" value="3"/> <entry key="product.build.minor" type="int" operation="+"/> <entry key="product.build.patch" type="int" value="0"/> <entry key="product.build.date" type="date" value="now"/> </propertyfile> </target>
运行此目标后,版本将发生更改,例如从 3.2.2 更改为 3.3.0。