<?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>Home</title>
        <author email="dev@commons.apache.org">Commons Documentation Team</author>
    </properties>
    <body>
        <!-- ================================================== -->
        <section name="Commons Release Plugin Release History">

            <table>
                <tr><th>Version</th><th>Release date</th><th>Required Java Version</th><th>Javadoc</th><th>Release notes</th></tr>
                <tr>
                    <td>1.7</td><td>8-30-2019</td><td>8.0</td><td><a href="javadocs/api-1.7/index.html">api-1.7</a></td><td><a href="release-notes/RELEASE-NOTES-1.7.txt">release notes for 1.7</a></td>
                </tr>
                <tr>
                    <td>1.6</td><td>3-8-2019</td><td>8.0</td><td><a href="javadocs/api-1.6/index.html">api-1.6</a></td><td><a href="release-notes/RELEASE-NOTES-1.6.txt">release notes for 1.6</a></td>
                </tr>
                <tr>
                    <td>1.5</td><td>1-25-2019</td><td>8.0</td><td><a href="javadocs/api-1.5/index.html">api-1.5</a></td><td><a href="release-notes/RELEASE-NOTES-1.5.txt">release notes for 1.5</a></td>
                </tr>
                <tr>
                    <td>1.4</td><td>8-24-2018</td><td>8.0</td><td><a href="javadocs/api-1.4/index.html">api-1.4</a></td><td><a href="release-notes/RELEASE-NOTES-1.4.txt">release notes for 1.4</a></td>
                </tr>
                <tr>
                    <td>1.3</td><td>6-15-2018</td><td>8.0</td><td><a href="javadocs/api-1.3/index.html">api-1.3</a></td><td><a href="release-notes/RELEASE-NOTES-1.3.txt">release notes for 1.3</a></td>
                </tr>
                <tr>
                    <td>1.2</td><td>4-2-2018</td><td>7.0</td><td><a href="javadocs/api-1.2/index.html">api-1.2</a></td><td><a href="release-notes/RELEASE-NOTES-1.2.txt">release notes for 1.2</a></td>
                </tr>
                <tr>
                    <td>1.1</td><td>2-28-2018</td><td>7.0</td><td><a href="javadocs/api-1.1/index.html">api-1.1</a></td><td><a href="release-notes/RELEASE-NOTES-1.1.txt">release notes for 1.1</a></td>
                </tr>
                <tr>
                    <td>1.0</td><td>1-10-2018</td><td>7.0</td><td><a href="javadocs/api-1.0/index.html">api-1.0</a></td><td><a href="release-notes/RELEASE-NOTES-1.0.txt">release notes for 1.0</a></td>
                </tr>
            </table>

        </section>
        <!-- ================================================== -->
    </body>
</document>