<?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">
  <bannerLeft>
    <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.9</version>
  </skin>

  <custom>
    <fluidoSkin>
      <sourceLineNumbersEnabled>true</sourceLineNumbersEnabled>
      <googleSearch>
        <sitesearch>maven.apache.org/plugins/maven-ear-plugin/</sitesearch>
      </googleSearch>
    </fluidoSkin>
  </custom>

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

    <menu name="Examples">
      <item name="Filtering EAR Resources" href="examples/filtering-sources.html"/>
      <item name="Advanced Filtering Techniques" href="examples/filtering-advanced.html"/>
      <item name="Creating Skinny WARs" href="examples/skinny-wars.html"/>
      <item name="Creating Skinny Modules" href="examples/skinny-modules.html"/>
      <item name="Customizing A Module Filename" href="examples/customizing-a-module-filename.html"/>
      <item name="Customizing The Context Root" href="examples/customizing-context-root.html"/>
      <item name="Customizing A Module Location" href="examples/customizing-module-location.html"/>
      <item name="Customizing A Module URI" href="examples/customizing-module-uri.html"/>
      <item name="Excluding A Module" href="examples/excluding-a-module.html"/>
      <item name="Excluding Files From the EAR" href="examples/excluding-files-from-ear.html"/>
      <item name="Unpacking A Module" href="examples/unpacking-a-module.html"/>
      <item name="Including A Third Party Library In application.xml" href="examples/including-a-third-party-library-in-application-xml.html"/>
      <item name="Specifying Security Roles For The Generated application.xml" href="examples/specifying-security-roles-for-the-generated-application-xml.html"/>
      <item name="Specifying Environment Entries In application.xml" href="examples/specifying-env-entries-for-the-generated-application-xml.html"/>
      <item name="Generating jboss-app.xml" href="examples/generating-jboss-app.html"/>
      <item name="Customize file name mapping" href="examples/customize-file-name-mapping.html"/>
      <item name="Generating modules ID" href="examples/generating-modules-id.html"/>
      <item name="Using JavaEE application clients" href="examples/using-app-client.html"/>
      <item name="Eclipse and Maven Integration" href="examples/eclipse-and-maven-integration.html"/>
    </menu>
  </body>
</project>
