<?xml version="1.0" encoding="UTF-8"?>
<!--
   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.
-->
<document>
  <properties>
    <title>commons:readme-md</title>
  </properties>
  <body>
    <section name="commons:readme-md">
      <p><strong>Full name</strong>:</p>
      <p>org.apache.commons:commons-build-plugin:1.9:readme-md</p>
      <p><strong>Description</strong>:</p>
      <div>Apache Commons Build Mojo: Generate README.md</div>
      <p><strong>Attributes</strong>:</p>
      <ul>
        <li>Requires a Maven 2.0 project to be executed.</li>
        <li>Is NOT inherited by default in multi-project builds.</li>
      </ul>
      <subsection name="Required Parameters">
        <table border="0" align="left">
          <tr>
            <th>Name</th>
            <th>Type</th>
            <th>Since</th>
            <th>Description</th>
          </tr>
          <tr>
            <td><strong><a href="#commons.release.version">commons.release.version</a></strong></td>
            <td><code>String</code></td>
            <td><code>-</code></td>
            <td>The version of the latest release of the project.<br/><strong>Default value is</strong>: <code>${commons.release.version}</code>.</td>
          </tr>
          <tr>
            <td><strong><a href="#commons.componentid">commons.componentid</a></strong></td>
            <td><code>String</code></td>
            <td><code>-</code></td>
            <td>Commons component id.<br/><strong>Default value is</strong>: <code>${commons.componentid}</code>.</td>
          </tr>
          <tr>
            <td><strong><a href="#basedir">basedir</a></strong></td>
            <td><code>File</code></td>
            <td><code>-</code></td>
            <td>The base directory from which to execute the Ant script.<br/><strong>Default value is</strong>: <code>${basedir}</code>.</td>
          </tr>
        </table>
      </subsection>
      <subsection name="Optional Parameters">
        <table border="0" align="left">
          <tr>
            <th>Name</th>
            <th>Type</th>
            <th>Since</th>
            <th>Description</th>
          </tr>
          <tr>
            <td><strong><a href="#messageLevel">messageLevel</a></strong></td>
            <td><code>String</code></td>
            <td><code>-</code></td>
            <td>The message-level used to tune the verbosity of Ant logging.<br/><strong>Default value is</strong>: <code>info</code>.</td>
          </tr>
        </table>
      </subsection>
      <subsection name="Parameter Details">
        <p><strong><a name="commons.release.version">commons.release.version</a>:</strong></p>
        <div>The version of the latest release of the project.</div>
        <ul>
          <li><strong>Type</strong>: <code>java.lang.String</code></li>
          <li><strong>Required</strong>: <code>Yes</code></li>
          <li><strong>Default</strong>: <code>${commons.release.version}</code></li>
        </ul><hr/><p><strong><a name="commons.componentid">commons.componentid</a>:</strong></p>
        <div>The Commons componentid.</div>
        <ul>
          <li><strong>Type</strong>: <code>java.lang.String</code></li>
          <li><strong>Required</strong>: <code>Yes</code></li>
          <li><strong>Default</strong>: <code>${commons.componentid}</code></li>
        </ul><hr/><p><strong><a name="basedir">basedir</a>:</strong></p>
        <div>The base directory from which to execute the Ant script.</div>
        <ul>
          <li><strong>Type</strong>: <code>java.io.File</code></li>
          <li><strong>Required</strong>: <code>Yes</code></li>
          <li><strong>Expression</strong>: <code>${antBasedir}</code></li>
          <li><strong>Default</strong>: <code>${basedir}</code></li>
        </ul><hr/><p><strong><a name="messageLevel">messageLevel</a>:</strong></p>
        <div>The message-level used to tune the verbosity of Ant logging.</div>
        <ul>
          <li><strong>Type</strong>: <code>java.lang.String</code></li>
          <li><strong>Required</strong>: <code>No</code></li>
          <li><strong>Expression</strong>: <code>${antMessageLevel}</code></li>
          <li><strong>Default</strong>: <code>info</code></li>
        </ul>
      </subsection>
    </section>
  </body>
</document>