<?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"
  name="Apache Maven">

  <bannerLeft>
    <name>${project.name}</name>
    <src>https://maven.apache.org/images/apache-maven-project.png</src>
    <href>https://maven.apache.org/</href>
  </bannerLeft>

  <edit>${project.scm.url}</edit>

  <body>
    <breadcrumbs>
      <item name="Ref" href="../" />
      <item name="Maven ${project.version}" href="./" />
    </breadcrumbs>

    <menu name="Overview">
      <item name="Introduction" href="index.html"/>
      <item name="JavaDocs" href="apidocs/index.html"/>
      <item name="Source Xref" href="xref/index.html"/>
      <!--item name="FAQ" href="faq.html"/-->
      <item name="License" href="http://www.apache.org/licenses/"/>
      <item name="Download" href="/download.html"/>
    </menu>

    <menu name="Descriptors Reference">
      <item name="POM" href="./maven-model/maven.html"/>
      <item name="Settings" href="./maven-settings/settings.html"/>
      <item name="Toolchains" href="./maven-core/toolchains.html"/>
    </menu>

    <menu name="Reference">
      <item name="Lifecycles" href="./maven-core/lifecycles.html"/>
      <item name="Plugin Bindings to Default Lifecycle" href="./maven-core/default-bindings.html"/>
      <item name="Artifact Handlers" href="./maven-core/artifact-handlers.html"/>
      <item name="CLI options" href="./maven-embedder/cli.html"/>
    </menu>

    <menu name="Development">
      <item name="Maven Developer Centre" href="../../developers/index.html"/>
      <item name="Maven Core ITs" href="../../core-its/index.html"/>
    </menu>

    <menu ref="modules"/>
    <menu ref="reports"/>
  </body>
</project>