<?xml version="1.0"?>
<!--
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.
-->
<!--
 +======================================================================+
 |****                                                              ****|
 |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
 |****                    DO NOT EDIT DIRECTLY                      ****|
 |****                                                              ****|
 +======================================================================+
 | TEMPLATE FILE: download-page-template.xml                            |
 | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
 +======================================================================+
 |                                                                      |
 | 1) Re-generate using: mvn commons-build:download-page                |
 |                                                                      |
 | 2) Set the following properties in the component's pom:              |
 |    - commons.componentid (required, alphabetic, lower case)          |
 |    - commons.release.version (required)                              |
 |    - commons.release.name    (required)                              |
 |    - commons.binary.suffix   (optional)                              |
 |      (defaults to "-bin", set to "" for pre-maven2 releases)         |
 |    - commons.release.desc    (optional)                              |
 |    - commons.release.subdir  (optional)                              |
 |                                                                      |
 |    - commons.release.2/3.version       (conditional)                 |
 |    - commons.release.2/3.name          (conditional)                 |
 |    - commons.release.2/3.binary.suffix (optional)                    |
 |    - commons.release.2/3.desc          (optional)                    |
 |    - commons.release.2/3.subdir        (optional)                    |
 |                                                                      |
 | 3) Example Properties                                                |
 |    (commons.release.name inherited by parent:                        |
 |     ${project.artifactId}-${commons.release.version}                 |
 |                                                                      |
 |  <properties>                                                        |
 |    <commons.componentid>math</commons.componentid>                   |
 |    <commons.release.version>1.2</commons.release.version>            |
 |  </properties>                                                       |
 |                                                                      |
 +======================================================================+
-->
<document>
  <properties>
    <title>Download Apache Commons Build Plugin Maven Mojo</title>
    <author email="dev@commons.apache.org">Apache Commons Documentation Team</author>
  </properties>
  <body>
    <section name="Download Apache Commons Build Plugin Maven Mojo">
    <subsection name="Using a Mirror">
      <p>
        We recommend you use a mirror to download our release
        builds, but you <strong>must</strong> <a href="http://www.apache.org/info/verification.html">verify the integrity</a> of
        the downloaded files using signatures downloaded from our main
        distribution directories. Recent releases (48 hours) may not yet
        be available from all the mirrors.
      </p>

      <p>
        You are currently using <b>[preferred]</b>.  If you
        encounter a problem with this mirror, please select another
        mirror.  If all mirrors are failing, there are <i>backup</i>
        mirrors (at the end of the mirrors list) that should be
        available.
        <br></br>
        [if-any logo]<a href="[link]"><img align="right" src="[logo]" border="0"></img></a>[end]
      </p>

      <form action="[location]" method="get" id="SelectMirror">
        <p>
          Other mirrors:
          <select name="Preferred">
          [if-any http]
            [for http]<option value="[http]">[http]</option>[end]
          [end]
          [if-any ftp]
            [for ftp]<option value="[ftp]">[ftp]</option>[end]
          [end]
          [if-any backup]
            [for backup]<option value="[backup]">[backup] (backup)</option>[end]
          [end]
          </select>
          <input type="submit" value="Change"></input>
        </p>
      </form>

      <p>
        It is essential that you
        <a href="https://www.apache.org/info/verification.html">verify the integrity</a>
        of downloaded files, preferably using the <code>PGP</code> signature (<code>*.asc</code> files);
        failing that using the <code>SHA1</code> hash (<code>*.sha1</code> checksum files).
      </p>
      <p>
        The <a href="https://www.apache.org/dist/commons/KEYS">KEYS</a>
        file contains the public PGP keys used by Apache Commons developers
        to sign releases.
      </p>
    </subsection>
    </section>
    <section name="Apache Commons Build Plugin Maven Mojo 1.10 ">
      <subsection name="Binaries">
        <table>
          <tr>
              <td><a href="[preferred]/commons/commons-build-plugin/binaries/commons-build-plugin-1.10-bin.tar.gz">commons-build-plugin-1.10-bin.tar.gz</a></td>
              <td><a href="https://www.apache.org/dist/commons/commons-build-plugin/binaries/commons-build-plugin-1.10-bin.tar.gz.sha1">sha1</a></td>
              <td><a href="https://www.apache.org/dist/commons/commons-build-plugin/binaries/commons-build-plugin-1.10-bin.tar.gz.asc">pgp</a></td>
          </tr>
          <tr>
              <td><a href="[preferred]/commons/commons-build-plugin/binaries/commons-build-plugin-1.10-bin.zip">commons-build-plugin-1.10-bin.zip</a></td>
              <td><a href="https://www.apache.org/dist/commons/commons-build-plugin/binaries/commons-build-plugin-1.10-bin.zip.sha1">sha1</a></td>
              <td><a href="https://www.apache.org/dist/commons/commons-build-plugin/binaries/commons-build-plugin-1.10-bin.zip.asc">pgp</a></td>
          </tr>
        </table>
      </subsection>
      <subsection name="Source">
        <table>
          <tr>
              <td><a href="[preferred]/commons/commons-build-plugin/source/commons-build-plugin-1.10-src.tar.gz">commons-build-plugin-1.10-src.tar.gz</a></td>
              <td><a href="https://www.apache.org/dist/commons/commons-build-plugin/source/commons-build-plugin-1.10-src.tar.gz.sha1">sha1</a></td>
              <td><a href="https://www.apache.org/dist/commons/commons-build-plugin/source/commons-build-plugin-1.10-src.tar.gz.asc">pgp</a></td>
          </tr>
          <tr>
              <td><a href="[preferred]/commons/commons-build-plugin/source/commons-build-plugin-1.10-src.zip">commons-build-plugin-1.10-src.zip</a></td>
              <td><a href="https://www.apache.org/dist/commons/commons-build-plugin/source/commons-build-plugin-1.10-src.zip.sha1">sha1</a></td>
              <td><a href="https://www.apache.org/dist/commons/commons-build-plugin/source/commons-build-plugin-1.10-src.zip.asc">pgp</a></td>
          </tr>
        </table>
      </subsection>
    </section>
    <section name="Archives">
        <p>
          Older releases can be obtained from the archives.
        </p>
        <ul>
          <li class="download"><a href="[preferred]/commons/commons-build-plugin/">browse download area</a></li>
          <li><a href="https://archive.apache.org/dist/commons/commons-build-plugin/">archives...</a></li>
        </ul>
    </section>
  </body>
</document>
