<?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.
-->

<project xmlns="http://maven.apache.org/DECORATION/1.8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.8.0 http://maven.apache.org/xsd/decoration-1.8.0.xsd">

  <body>
    <breadcrumbs>
      <item name="Maven" href="https://maven.apache.org/pom/maven/index.html" />
      <item name="Doxia Tools" href="https://maven.apache.org/pom/maven/doxia-tools/index.html" />
    </breadcrumbs>

    <menu name="Maven Parent POMs">
      <item name="Maven" href="../index.html"/>
      <item name="Plugins" href="../maven-plugins/index.html"/>
      <item name="Extensions" href="../maven-extensions/index.html"/>
      <item name="Shared Components" href="../maven-shared-components/index.html"/>
      <item name="Skins" href="../maven-skins/index.html"/>
      <item name="Doxia Tools" href="../doxia-tools/index.html"/>
    </menu>

    <menu ref="parent" />
  </body>
</project>