<?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="https://dlcdn.apache.org/maven/plugins/${project.artifactId}-${project.version}-source-release.zip">${project.artifactId}-${project.version}-source-release.zip</a></td>
              <td><a href="https://downloads.apache.org/maven/plugins/${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/plugins/${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/plugins/">archive site</a>.</p>
      </subsection>
    </section>
  </body>
</document>

