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

