|
- <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
- <html>
- <head>
- <meta http-equiv="Content-Language" content="en-us">
- <link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
- <title>PropertyFile Task</title>
- </head>
-
- <body>
-
- <h1>PropertyFile</h1>
- <hr/>
- <h2 id="introduction">Introduction</h2>
- <p>Apache Ant provides an optional task for editing property files. This is
- very useful when wanting to make unattended modifications to
- configuration files for application servers and
- applications. Currently, the task maintains a working property file
- with the ability to add properties or make changes to existing
- ones. <em>Since Ant 1.8.0</em> comments and layout of the original properties
- file are preserved.</p>
-
- <p><em>Since Ant 1.8.2</em> the linefeed-style of the original file
- will be preserved as well, as long as style used to be consistent.
- In general, linefeeds of the updated file will be the same as the
- first linefeed found when reading it.</p>
-
- <hr/>
- <h2 id="proptask">PropertyFile Task</h2>
- <h3>Parameters</h3>
- <table>
- <tr>
- <td valign="top"><b>Attribute</b></td>
- <td valign="top"><b>Description</b></td>
- <td valign="top"><b>Required</b></td>
- </tr>
- <tr>
- <td valign="top">file</td>
- <td valign="top">Location of the property file to be edited</td>
- <td valign="top">Yes</td>
- </tr>
- <tr>
- <td valign="top">comment</td>
- <td valign="top">Header for the file itself</td>
- <td valign="top">no</td>
- </tr>
- <tr>
- <td valign="top">jdkproperties</td>
- <td valign="top">Use java.lang.Properties, which will
- lose comments and layout of file (default is 'false'). <em>since
- Ant 1.8.0</em></td>
- <td valign="top">no</td>
- </tr>
- </table>
-
- <p>The boolean attribute 'jdkproperties' is provided to recover the
- previous behaviour of the task, in which the layout and any comments
- in the properties file were lost by the task.</p>
-
- <h3>Parameters specified as nested elements</h3>
- <h4 id="entryElement">Entry</h4>
- <p>Use nested <code><entry></code>
- elements to specify actual modifications to the property file itself.</p>
- <table>
- <tr>
- <td valign="top"><b>Attribute</b></td>
- <td valign="top"><b>Description</b></td>
- <td align="center" valign="top"><b>Required</b></td>
- </tr>
- <tr>
- <td valign="top">key</td>
- <td valign="top">Name of the property name/value pair</td>
- <td valign="top" align="center">Yes</td>
- </tr>
- <tr>
- <td valign="top">value</td>
- <td valign="top">Value to set (=), to add (+) or subtract (-)</td>
- <td valign="top" align="center" rowspan="2">At least one must be specified, if <i>operation</i> is not <i>delete</i></td>
- </tr>
- <tr>
- <td valign="top">default</td>
- <td valign="top">Initial value to set for a property if it is not
- already defined in the property file.<br>
- For type date, an additional keyword is allowed: "now"</td>
- </tr>
- <tr>
- <td valign="top">type</td>
- <td valign="top">Regard the value as : int, date or string (default)</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">operation</td>
- <td valign="top">One of the following operations:<br><br>
- <b>for all datatypes:</b><ul>
- <li>"del" : deletes an entry</li>
- <li>"+" : adds a value to the existing value</li>
- <li>"=" : sets a value instead of the existing value (default)</li>
- </ul><br><b>for date and int only:</b><ul>
- <li>"-" : subtracts a value from the existing value</li>
- </ul>
- </td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">pattern</td>
- <td valign="top">For int and date type only. If present, Values will
- be parsed and formatted accordingly.</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">unit</td>
- <td valign="top">The unit of the value to be applied to date +/- operations.
- Valid Values are:
- <ul>
- <li>millisecond</li>
- <li>second</li>
- <li>minute</li>
- <li>hour</li>
- <li>day (default)</li>
- <li>week</li>
- <li>month</li>
- <li>year</li>
- </ul>
- This only applies to date types using a +/- operation.
- </td>
- <td align="center" valign="top">No</td>
- </tr>
- </table>
- <p>The rules used when setting a property value are shown below. The
- operation occurs <b>after</b> these rules are considered.</p>
-
- <ul>
- <li>If only value is specified, the property is set to it regardless of its
- previous value.</li>
- <li>If only default is specified and the property previously existed in the
- property file, it is unchanged.</li>
- <li>If only default is specified and the property did not exist in the
- property file, the property is set to default.</li>
- <li>If value and default are both specified and the property previously
- existed in the property file, the property is set to value.</li>
- <li>If value and default are both specified and the property did not exist in
- the property file, the property is set to default.</li>
- </ul>
-
- <h3>Examples</h3>
-
- <p>The following changes the my.properties file. Assume my.properties look like:</p>
-
- <pre># 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</pre>
-
- <p>After running, the file would now look like
- </p>
- <pre>#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</pre>
- <p>
- The slashes conform to the expectations of the Properties class. The file will be stored in a manner so that each character is examined and escaped if necessary.
- </p>
-
- <p>
- The layout and comment of the original file is preserved. New properties are added at the end of the file. Existing properties are overwritten in place.
- </p>
-
- <pre><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>
- </pre>
- <p>
- To produce dates relative from today :</p>
- <pre><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>
- </pre>
-
- <p>
- Concatenation of strings :</p>
- <pre><propertyfile
- file="my.properties"
- comment="My properties">
- <entry key="progress" default="" operation="+" value="."/>
- </propertyfile>
- </pre>
- <p>Each time called, a "." will be appended to "progress"
- </p>
-
- <p>Pumps the project version to the next minor version (increase minor and set path=0):</p>
- <pre><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>
- </pre>
- After running this target the version changed e.g. from 3.2.2 to 3.3.0.
-
- </body>
- </html>
|