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

<site xmlns="http://maven.apache.org/SITE/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SITE/2.0.0 https://maven.apache.org/xsd/site-2.0.0.xsd"
  name="Apache Maven">

  <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="https://www.apache.org/licenses/"/>
      <item name="Download" href="../../download.cgi"/>
    </menu>

    <menu name="User Guide">
      <item name="Configuring Maven" href="configuring.html"/>
    </menu>

    <menu inherit="bottom" name="Descriptors Reference">
      <item name="POM" href="./api/maven-api-model/maven.html"/>
      <item name="Settings" href="./api/maven-api-settings/settings.html"/>
      <item name="Toolchains" href="./api/maven-api-toolchain/toolchains.html"/>
      <item name="Core Extensions" href="./api/maven-api-cli/core-extensions.html"/>
      <item name="Repository Metadata" href="./api/maven-api-metadata/repository-metadata.html"/>
      <item name="Plugin Descriptor" href="./api/maven-api-plugin/plugin.html"/>
      <item name="Lifecycle Descriptor" href="./api/maven-api-plugin/lifecycle.html"/>
    </menu>

    <menu inherit="bottom" name="Reference">
      <item name="Lifecycles" href="./impl/maven-core/lifecycles.html"/>
      <item name="Plugin Bindings to Default Lifecycle" href="./impl/maven-core/default-bindings.html"/>
      <item name="Artifact Handlers" href="./impl/maven-core/artifact-handlers.html"/>
      <item name="CLI options" href="./compat/maven-embedder/cli.html"/>
      <item name="Super POM" href="./compat/maven-model-builder/super-pom.html"/>
    </menu>

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

    <menu inherit="bottom" ref="modules"/>
    <menu inherit="bottom" ref="reports"/>
  </body>
</site>
