<?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 Text Release History">
      <p><em>Note.</em> For older javadocs see the individal artifact sub-sites.</p>
      <table>
        <tr><th>Version</th><th>Release date (YYYY-MM-DD)</th><th>Required Java Version</th><th>Release notes</th></tr>
        <tr>
          <td>1.1</td><td>2018-08-14</td><td>6+</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>2016-12-13</td><td>6+</td><td><a href="release-notes/RELEASE-NOTES-1.0.txt">release notes for 1.0</a></td>
        </tr>
      </table>

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