<html>
  
  <head>
    <meta http-equiv="Content-Language" content="en-us"></meta>
    <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>&lt;presetdef&gt;</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">
&lt;presetdef name="my.javac"&gt;
   &lt;javac debug="${debug}" deprecation="${deprecation}"
          srcdir="${src.dir}" destdir="${classes.dir}"&gt;
      &lt;src path="${gen.dir}"/&gt;
   &lt;/javac&gt;
&lt;/presetdef&gt;
</pre>
    </blockquote>
      This can be used as a normal javac task - example:
    <blockquote>
<pre class="code">
&lt;my.javac/&gt;
</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">
&lt;my.javac srcdir="${test.src}" deprecation="no"/&gt;
</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">
&lt;antlib&gt;
   &lt;taskdef resource="com/acme/antgoodies/tasks.properties"/&gt;
   &lt;!-- Implement the common use of the javac command --&gt;
   &lt;presetdef name="javac"&gt;
      &lt;javac deprecation="${deprecation}" debug="${debug}"
             srcdir="src" destdir="classes"/&gt;
   &lt;/presetdef&gt;
&lt;/antlib&gt;
</pre>
    </blockquote>
      One may then use this in a build file as follows:
    <blockquote>
<pre class="code">
&lt;project default="example" xmlns:antgoodies="antlib:com.acme.antgoodies"&gt;
   &lt;target name="example"&gt;
      &lt;!-- Compile source --&gt;
      &lt;antgoodies:javac srcdir="src/main"/&gt;
      &lt;!-- Compile test code --&gt;
      &lt;antgoodies:javac srcdir="src/test"/&gt;
   &lt;/target&gt;
&lt;/project&gt;
</pre>
    </blockquote>
    <p>
      The following is an example of evaluation of properties when the
      definition is used:
    </p>
     <blockquote>
<pre class="code">
&lt;target name="defineandcall"&gt;
   &lt;presetdef name="showmessage"&gt;
      &lt;echo&gt;message is '${message}'&lt;/echo&gt;
   &lt;/presetdef&gt;
   &lt;showmessage/&gt;
   &lt;property name="message" value="Message 1"/&gt;
   &lt;showmessage/&gt;
   &lt;antcall target="called"&gt;
      &lt;param name="message" value="Message 2"/&gt;
   &lt;/antcall&gt;
&lt;/target&gt;
&lt;target name="called"&gt;
   &lt;showmessage/&gt;
&lt;/target&gt;
</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>
    <hr></hr>
    <p align="center">Copyright &copy; 2003-2004 Apache Software
      Foundation. All rights Reserved.</p>
    
  </body>
</html>