<!--
  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>Developer guide for Apache Commons Testing</title>
  </properties>
  <body>

    <section name='Developer guide for Apache Commons Testing'>

      <h1>
        The Apache Commons
        <em>Testing</em>
        Component
      </h1>
      <h2>Developers Guide</h2>
      <br />
      <a href="#Introduction">[Introduction]</a>
      <a href="#PackageStructure">[Package Structure]</a>
      <a href="#UtilityClasses">[Utility Classes]</a>
      <a href="#Javadoc">[Javadoc]</a>
      <a href="#Building">[Building]</a>
      <br />
      <br />

      <a name="Introduction"></a>
      <h3>1. INTRODUCTION</h3>

      <a name="PackageStructure"></a>
      <h3>2. PACKAGE STRUCTURE</h3>

      <a name="UtilityClasses"></a>
      <h3>3. UTILITY CLASSES</h3>

      <a name="Javadoc"></a>
      <h3>4. JAVADOC</h3>

      <a name="Building"></a>
      <h3>5.BUILDING</h3>
      <h4>Building a Release</h4>
      <p>
        Commons Testing targets Java 8.
      </p>
    </section>
  </body>
</document>
