| <!-- |
| 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"></meta> |
| <link rel="stylesheet" type="text/css" href="../stylesheets/style.css"> |
| <title>PreSetDef Task</title> |
| <style type="text/css"> |
| <!-- |
| .code { background: #EFEFEF; margin-top: } |
| --> |
| </style> |
| </head> |
| |
| <body> |
| |
| <h2><a name="presetdef">PreSetDef</a></h2> |
| <h3>Description</h3> |
| <p> |
| The preset definition generates a new definition |
| based on a current definition with some attributes |
| or elements preset. |
| </p> |
| <p> |
| <em>since Ant 1.6</em> |
| </p> |
| <p> |
| The resolution of properties in any of the attributes or |
| nested text takes place with the definition is used and <em>not</em> |
| when the preset definition is defined. |
| </p> |
| <h3>Parameters</h3> |
| <table border="1" cellpadding="2" cellspacing="0"> |
| <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">name</td> |
| <td valign="top">the name of the new definition</td> |
| <td valign="top" align="center">Yes</td> |
| </tr> |
| <tr> |
| <td valign="top">uri</td> |
| <td valign="top"> |
| The uri that this definition should live in. |
| </td> |
| <td valign="top" align="center">No</td> |
| </tr> |
| </table> |
| <h3>Parameters specified as nested elements</h3> |
| <h4>another type with attributes or elements set</h4> |
| <p>The <code><presetdef></code> task takes one nested element as a parameter. |
| This nested element can be any other type or task. The attributes |
| and elements that need to be preset are placed here. |
| </p> |
| |
| <h3>Examples</h3> |
| The following fragment defines a javac task with the debug, deprecation |
| srcdir and destdir |
| attributes set. It also has a src element to source files from a generated |
| directory. |
| <blockquote> |
| <pre class="code"> |
| <presetdef name="my.javac"> |
| <javac debug="${debug}" deprecation="${deprecation}" |
| srcdir="${src.dir}" destdir="${classes.dir}"> |
| <src path="${gen.dir}"/> |
| </javac> |
| </presetdef> |
| </pre> |
| </blockquote> |
| This can be used as a normal javac task - example: |
| <blockquote> |
| <pre class="code"> |
| <my.javac/> |
| </pre> |
| </blockquote> |
| The attributes specified in the preset task may be overridden - i.e. |
| they may be seen as optional attributes - example: |
| <blockquote> |
| <pre class="code"> |
| <my.javac srcdir="${test.src}" deprecation="no"/> |
| </pre> |
| </blockquote> |
| One may put a presetdef definition in an antlib. |
| For example suppose the jar file antgoodies.jar has |
| the antlib.xml as follows: |
| <blockquote> |
| <pre class="code"> |
| <antlib> |
| <taskdef resource="com/acme/antgoodies/tasks.properties"/> |
| <!-- Implement the common use of the javac command --> |
| <presetdef name="javac"> |
| <javac deprecation="${deprecation}" debug="${debug}" |
| srcdir="src" destdir="classes"/> |
| </presetdef> |
| </antlib> |
| </pre> |
| </blockquote> |
| One may then use this in a build file as follows: |
| <blockquote> |
| <pre class="code"> |
| <project default="example" xmlns:antgoodies="antlib:com.acme.antgoodies"> |
| <target name="example"> |
| <!-- Compile source --> |
| <antgoodies:javac srcdir="src/main"/> |
| <!-- Compile test code --> |
| <antgoodies:javac srcdir="src/test"/> |
| </target> |
| </project> |
| </pre> |
| </blockquote> |
| <p> |
| The following is an example of evaluation of properties when the |
| definition is used: |
| </p> |
| <blockquote> |
| <pre class="code"> |
| <target name="defineandcall"> |
| <presetdef name="showmessage"> |
| <echo>message is '${message}'</echo> |
| </presetdef> |
| <showmessage/> |
| <property name="message" value="Message 1"/> |
| <showmessage/> |
| <antcall target="called"> |
| <param name="message" value="Message 2"/> |
| </antcall> |
| </target> |
| <target name="called"> |
| <showmessage/> |
| </target> |
| </pre> |
| </blockquote> |
| <p> |
| The command ant defineandcall results in the output: |
| </p> |
| <blockquote> |
| <pre class="code"> |
| defineandcall: |
| [showmessage] message is '${message}' |
| [showmessage] message is 'Message 1' |
| |
| called: |
| [showmessage] message is 'Message 2' |
| </pre> |
| </blockquote> |
| <p> |
| It is possible to use a trick to evaluate properties when the definition is |
| <em>made</em> rather than used. This can be useful if you do not expect some |
| properties to be available in child builds run with |
| <code><ant ... inheritall="false"></code>: |
| </p> |
| <blockquote><pre class="code"> |
| <macrodef name="showmessage-presetdef"> |
| <attribute name="messageval"/> |
| <presetdef name="showmessage"> |
| <echo>message is '@{messageval}'</echo> |
| </presetdef> |
| </macrodef> |
| <showmessage-presetdef messageval="${message}"/> |
| </pre></blockquote> |
| <hr></hr> |
| |
| </body> |
| </html> |
| |