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

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

  <body>
    <breadcrumbs>
      <item name="Extensions" href="https://maven.apache.org/extensions/index.html" />
      <item name="Maven Build Cache Extension" 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"/-->
    </menu>

    <menu name="Documentation">
      <item name="Overview" href="cache.html"/>
      <item name="Getting Started" href="getting-started.html"/>
      <item name="Usage" href="usage.html"/>
      <item name="Remote Cache Setup" href="remote-cache.html"/>
      <item name="Howto" href="how-to.html"/>
      <item name="Performance" href="performance.html"/>
      <item name="Cache Parameters" href="parameters.html"/>
    </menu>

    <menu name="Reference">
      <item name="maven-cache-config.xml" href="build-cache-config.html"/>
    </menu>

    <menu name="Cache Internals">
      <item name="buildinfo.xml" href="build-cache-build.html"/>
      <item name="diff-*.xml" href="build-cache-diff.html"/>
      <item name="cache-report.xml" href="build-cache-report.html"/>
    </menu>

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