<?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.
-->

<document>
  <properties>
    <title>Download ${project.name} Source</title>
  </properties>
  <body>
    <section name="Download ${project.name} ${project.version} Source">

      <p>${project.name} ${project.version} is distributed in source format. Use a source archive if you intend to build
      ${project.name} yourself. Otherwise, simply use the ready-made binary artifacts from central repository.</p>

      <p>You will be prompted for a mirror - if the file is not found on yours, please be patient, as it may take 24
      hours to reach all mirrors.<p/>

      <p>In order to guard against corrupted downloads/installations, it is highly recommended to
      <a href="http://www.apache.org/dev/release-signing#verifying-signature">verify the signature</a>
      of the release bundles against the public <a href="http://www.apache.org/dist/maven/KEYS">KEYS</a> used by the Apache Maven
      developers.</p>

      <p>${project.name} is distributed under the <a href="http://www.apache.org/licenses/">Apache License, version 2.0</a>.</p>

      <p></p>We <b>strongly</b> encourage our users to configure a Maven repository mirror closer to their location, please read <a href="./guides/mini/guide-mirror-settings.html">How to Use Mirrors for Repositories</a>.</p>

      <a name="mirror"/>
      <subsection name="Mirror">

        <p>
          [if-any logo]
          <a href="[link]">
            <img align="right" src="[logo]" border="0"
                 alt="logo"/>
          </a>
          [end]
          The currently selected mirror is
          <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.
        </p>

        <form action="[location]" method="get" id="SelectMirror">
          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"/>
        </form>

        <p>
          You may also consult the
          <a href="http://www.apache.org/mirrors/">complete list of
            mirrors.</a>
        </p>

      </subsection>
      
      <subsection name="${project.name} ${project.version}">
        
      <p>This is the current stable version of ${project.name}.</p>
        
      <table>
        <thead>
          <tr>
            <th></th>
            <th>Link</th>
            <th>Checksum</th>
            <th>Signature</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>${project.name} ${project.version} (Source zip)</td>
            <td><a href="[preferred]maven/plugins/${project.artifactId}-${project.version}-source-release.zip">maven/plugins/${project.artifactId}-${project.version}-source-release.zip</a></td>
            <td><a href="http://www.apache.org/dist/maven/plugins/${project.artifactId}-${project.version}-source-release.zip.md5">maven/plugins/${project.artifactId}-${project.version}-source-release.zip.md5</a></td>
            <td><a href="http://www.apache.org/dist/maven/plugins/${project.artifactId}-${project.version}-source-release.zip.asc">maven/plugins/${project.artifactId}-${project.version}-source-release.zip.asc</a></td>
          </tr>
        </tbody>
      </table>
      </subsection>

      <subsection name="Previous Versions">
        
      <p>Older non-recommended releases can be found on our <a href="http://archive.apache.org/dist/maven/plugins/">archive site</a>.</p>

      </subsection>
    </section>
  </body>
</document>

