<?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><strong>${project.name} ${project.version}</strong> is distributed in source format.</p>

      <p>Use a source archive if you intend to build <strong>${project.name}</strong> yourself.</p>

      <p>Otherwise, simply use the ready-made binary artifacts from <strong>central repository</strong>.</p>

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

      <subsection name="Files">
        
        <p>This is the current stable version of <strong>${project.name}</strong>.</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/shared/${project.artifactId}-${project.version}-source-release.zip">${project.artifactId}-${project.version}-source-release.zip</a></td>
              <td><a href="https://downloads.apache.org/maven/shared/${project.artifactId}-${project.version}-source-release.zip.sha512">${project.artifactId}-${project.version}-source-release.zip.sha512</a></td>
              <td><a href="https://downloads.apache.org/maven/shared/${project.artifactId}-${project.version}-source-release.zip.asc">${project.artifactId}-${project.version}-source-release.zip.asc</a></td>
            </tr>
          </tbody>
        </table>

        <p>It is essential that you <a href="https://www.apache.org/info/verification.html">verify the integrity</a> of the downloaded file
          using the checksum (.sha512 file)
          or using the signature (.asc file) against the public <a href="https://downloads.apache.org/maven/KEYS">KEYS</a> used by the Apache Maven developers.
        </p>

      </subsection>

      <subsection name="Previous Versions">
        <p>It is strongly recommended to use the latest release version of <strong>${project.name}</strong> to take advantage of the newest features and bug fixes.</p>
        <p>Older non-recommended releases can be found on our <a href="https://archive.apache.org/dist/maven/shared/">archive site</a>.</p>
      </subsection>
    </section>
  </body>
</document>

