<?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">
<!-- Start copy/paste of src/site/site.xml: inheritance does not work here because of src/site-docs hack -->
  <bannerLeft>
    <name>${project.name}</name>
    <src>https://maven.apache.org/images/apache-maven-project.png</src>
    <href>https://www.apache.org/</href>
  </bannerLeft>

  <bannerRight>
    <src>https://maven.apache.org/images/maven-logo-black-on-white.png</src>
    <href>https://maven.apache.org/</href>
  </bannerRight>

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

  <googleAnalyticsAccountId>UA-140879-1</googleAnalyticsAccountId>

  <custom>
    <fluidoSkin>
      <sourceLineNumbersEnabled>true</sourceLineNumbersEnabled>
      <googlePlusOne />
      <googleSearch>
        <sitesearch/>
      </googleSearch>
    </fluidoSkin>
  </custom>

  <publishDate position="right" />
  <version position="right" />
<!-- End copy/paste of src/site/site.xml -->

  <body>

    <breadcrumbs>
      <item name="Apache" href="https://www.apache.org/" />
      <item name="Maven"  href="https://maven.apache.org/index.html" />
      <item name="Parent POMs" href="https://maven.apache.org/pom/index.html" />
      <item name="Maven"  href="https://maven.apache.org/pom/maven/index.html" />
    </breadcrumbs>

    <menu name="Overview">
      <item name="Introduction" href="index.html"/>
      <!-- According to http://jira.codehaus.org/browse/MNGSITE-152 -->
      <item name="License" href="https://www.apache.org/licenses/"/>
      <item name="Download" href="download.html"/>
    </menu>

    <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="reports" inherit="bottom" />

  </body>
</project>