<?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.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd">
  <body>
    <breadcrumbs>
      <item name="Maven" href="https://maven.apache.org/pom/maven/index.html" />
      <item name="Shared Components" href="https://maven.apache.org/pom/maven/maven-shared-components/index.html" />
    </breadcrumbs>

    <menu name="Maven Parent POMs">
      <item name="Maven" href="../index.html"/>
      <item name="Archetypes" href="../maven-archetypes-bundles/index.html"/>
      <item name="Plugins" href="../maven-plugins/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>