<?xml version="1.0" encoding="UTF-8"?>

<!--
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 xmlns="http://maven.apache.org/XDOC/2.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
  <properties>
    <title>Parent Javadoc</title>
  </properties>

  <body>
    <section name="Apache Giraph Javadoc">
      <p>This is a multi-module maven project where the parent is composed of several modules.</p>
      <ul> 
        <li><strong>giraph-core</strong> contains the core Giraph classes and its javadoc can be found <a href="giraph-core/apidocs/overview-summary.html">here</a>.</li>
        <li><strong>giraph-examples</strong> contains many toy examples and its javadoc can be found <a href="giraph-examples/apidocs/package-summary.html">here</a>.</li>
      </ul>
    </section>
  </body>
</document>
