<?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.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.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>
  <bannerRight>
    <src>https://maven.apache.org/images/maventxt_logo_200.gif</src>
  </bannerRight>

  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.3.0</version>
  </skin>

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