<?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.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0
                      http://maven.apache.org/xsd/decoration-1.0.0.xsd">

  <body>
    <menu name="Reference">
      <item name="Descriptor Format" href="./assembly.html"/>
      <item name="Predefined Descriptors" href="./descriptor-refs.html"/>
      <item name="Components" href="./assembly-component.html"/>
    </menu>

    <menu name="Overview">
      <item name="Introduction" href="./index.html"/>
      <item name="Goals" href="./plugin-info.html"/>
      <item name="Usage" href="./usage.html"/>
      <item name="FAQ" href="./faq.html"/>
      <!-- According to https://issues.apache.org/jira/browse/MNGSITE-152 -->
      <item name="License" href="http://www.apache.org/licenses/"/>
      <item name="Download" href="download.html"/>
    </menu>

    <menu name="Advanced Topics">
      <item name="Assembly Descriptors" href="./advanced-descriptor-topics.html"/>
      <item name="ModuleSets" href="./advanced-module-set-topics.html"/>
    </menu>

    <menu name="Examples">
      <item name="Examples Index" href="./examples/index.html"/>
      <item name="Single Project" collapse="false" href="./examples/single/index.html">
        <item name="Filtering Some Distribution Files" href="./examples/single/filtering-some-distribution-files.html"/>
        <item name="Including/Excluding Artifacts" href="./examples/single/including-and-excluding-artifacts.html"/>
        <item name="Using Component Descriptors" href="./examples/single/using-components.html"/>
        <item name="Using Repositories" href="./examples/single/using-repositories.html"/>
        <item name="Using Container Descriptor Handlers" href="./examples/single/using-container-descriptor-handlers.html"/>
      </item>
      <item name="Multimodule Projects" collapse="false" href="./examples/multimodule/index.html">
        <item name="Include Module Artifacts" href="./examples/multimodule/module-binary-inclusion-simple.html"/>
        <item name="Include Module Sources" href="./examples/multimodule/module-source-inclusion-simple.html"/>
      </item>
      <item name="Sharing Assembly Descriptors" href="./examples/sharing-descriptors.html"/>
    </menu>
  </body>
</project>
