<?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.
 */
 -->
<document xmlns="http://maven.apache.org/DOCUMENT/1.0.1"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/DOCUMENT/1.0.1 http://maven.apache.org/xsd/document-1.0.1.xsd"
  outputName="apache-maven">

  <meta>
    <title>Apache Maven</title>
    <author>The Apache Maven Project</author>
    <keyWords>
      <keyWord>Java build system</keyWord>
      <keyWord>automated software build </keyWord>
      <keyWord>software project management</keyWord>
      <keyWord>dependency management</keyWord>
      <keyWord>project object model POM</keyWord>
    </keyWords>
    <description>Apache Maven is a software project management and comprehension tool. Based on
      the concept of a project object model (POM), Maven can manage a project's build,
      reporting and documentation from a central piece of information.</description>
  </meta>

  <toc name="Table of Contents">
    <!-- About -->
    <item name="What is Maven?" ref="what-is-maven.html"/>
    <item name="Features" ref="maven-features.html"/>
    <item name="FAQ" ref="general.html"/>

    <!-- Community -->
    <item name="Community Overview" ref="/community.html">
      <item name="How to Contribute" ref="/guides/development/guide-helping.html"/>
      <item name="Getting Help" ref="/users/getting-help.html" />
      <item name="Issue Management" ref="/issue-management.html" />
      <item name="Source Repository" ref="/scm.html" />
      <item name="CI Management" ref="/ci-management.html"/>
    </item>

    <!-- Generic Documentation -->
    <item name="Running Maven" ref="/run-maven/index.html" />
    <item name="Maven Plugins" ref="/plugins/index.html" />

    <!-- User Documentation -->
    <item name="User Centre" ref="/users/index.html">
      <item name="Maven in 5 Minutes" ref="/guides/getting-started/maven-in-five-minutes.html" />
      <item name="Getting Started Guide" ref="/guides/getting-started/index.html" />
      <item name="POM Reference" ref="/pom.html" />
      <item name="Settings Reference" ref="/settings.html" />

      <item name="Guides" ref="/guides/index.html">
        <item name="The Build Lifecycle" ref="/guides/introduction/introduction-to-the-lifecycle.html" />
        <item name="The POM" ref="/guides/introduction/introduction-to-the-pom.html" />
        <item name="Profiles" ref="/guides/introduction/introduction-to-profiles.html" />
        <item name="Repositories" ref="/guides/introduction/introduction-to-repositories.html" />
        <item name="Standard Directory Layout" ref="/guides/introduction/introduction-to-the-standard-directory-layout.html" />
        <item name="The Dependency Mechanism" ref="/guides/introduction/introduction-to-dependency-mechanism.html" />

        <item name="Plugin Development" ref="/guides/introduction/introduction-to-plugins.html" />
        <item name="Configuring Plug-ins" ref="/guides/mini/guide-configuring-plugins.html" />
        <item name="The Plugin Registry" ref="/guides/introduction/introduction-to-plugin-registry.html" />
        <item name="Plugin Prefix Resolution" ref="/guides/introduction/introduction-to-plugin-prefix-mapping.html" />
        <item name="Developing Ant Plugins" ref="/guides/plugin/guide-ant-plugin-development.html" />
        <item name="Developing Java Plugins" ref="/guides/plugin/guide-java-plugin-development.html" />

        <item name="Creating a Site" ref="/guides/mini/guide-site.html" />
        <item name="Snippet Macro" ref="/guides/mini/guide-snippet-macro.html" />

        <item name="What is an Archetype" ref="/guides/introduction/introduction-to-archetypes.html" />
        <item name="Creating Archetypes" ref="/guides/mini/guide-creating-archetypes.html" />

        <item name="From Maven 1.x to Maven 2.x" ref="/guides/mini/guide-m1-m2.html" />
        <item name="Using Maven 1.x repositories with Maven 2.x" ref="/guides/mini/guide-using-m1-repos-with-m2.html" />
        <item name="Relocation of Artifacts" ref="/guides/mini/guide-relocation.html" />

        <item name="Installing 3rd party JARs to Local Repository" ref="/guides/mini/guide-3rd-party-jars-local.html" />
        <item name="Deploying 3rd party JARs to Remote Repository" ref="/guides/mini/guide-3rd-party-jars-remote.html" />
        <item name="Coping with Sun JARs" ref="/guides/mini/guide-coping-with-sun-jars.html" />
        <item name="Remote repository access through authenticated HTTPS" ref="/guides/mini/guide-repository-ssl.html" />

        <item name="Creating Assemblies" ref="/guides/mini/guide-assemblies.html" />
        <item name="Configuring Archive Plugins" ref="/guides/mini/guide-archive-configuration.html" />
        <item name="Configuring Maven" ref="/guides/mini/guide-configuring-maven.html" />
        <item name="Mirror Settings" ref="/guides/mini/guide-mirror-settings.html" />
        <item name="Deployment and Security Settings" ref="/guides/mini/guide-deployment-security-settings.html" />
        <item name="Generating Sources" ref="/guides/mini/guide-generating-sources.html" />
        <item name="Working with Manifests" ref="/guides/mini/guide-manifest.html" />
        <item name="Maven Classloading" ref="/guides/mini/guide-maven-classloading.html" />
        <item name="Using Multiple Modules in a Build" ref="/guides/mini/guide-multiple-modules.html" />
        <item name="Using Multiple Repositories" ref="/guides/mini/guide-multiple-repositories.html" />
        <item name="Using Proxies" ref="/guides/mini/guide-proxies.html" />
        <item name="Using the Release Plugin" ref="/guides/mini/guide-releasing.html" />
        <item name="Using Ant with Maven" ref="/guides/mini/guide-using-ant.html" />
        <item name="Using Modello" ref="/guides/mini/guide-using-modello.html" />
        <item name="Using Extensions" ref="/guides/mini/guide-using-extensions.html" />
        <item name="Building For Different Environments with Maven 2" ref="/guides/mini/guide-building-for-different-environments.html" />
        <item name="Using Toolchains" ref="/guides/mini/guide-using-toolchains.html" />
        <item name="Encrypting passwords in settings.xml" ref="/guides/mini/guide-encryption.html" />

        <item name="Reusable Test JARs" ref="/guides/mini/guide-attached-tests.html" />
      </item>

    </item>

    <!-- Plugin Dev Documentation -->
    <item name="Plugin Developer Centre" ref="/plugin-developers/index.html">
      <item name="Testing your Plugin" ref="/plugin-developers/plugin-testing.html" />
      <item name="Documenting your Plugin" ref="/plugin-developers/plugin-documenting.html" />
      <item name="Common Bugs and Pitfalls" ref="/plugin-developers/common-bugs.html"/>
      <item name="Mojo API" ref="/developers/mojo-api-specification.html" />
    </item>

    <!-- Repository Documentation -->
    <item name="Maven Repository Centre" ref="/repository/index.html">
      <item name="Guide to Maven Evangelism" ref="/guides/mini/guide-maven-evangelism.html"/>
      <item name="Guide to uploading artifacts" ref="/guides/mini/guide-central-repository-upload.html"/>
    </item>

    <!-- Dev Documentation -->
    <item name="Maven Developer Centre" ref="/developers/index.html">
      <item name="Developing Maven" ref="/guides/development/guide-maven-development.html"/>
      <item name="Building Maven" ref="/guides/development/guide-building-maven.html"/>

      <!-- Committer -->
      <item name="Committer Environment" ref="/developers/committer-environment.html"/>
      <item name="Committer Settings" ref="/developers/committer-settings.html"/>
      <item name="Maven Code Style And Conventions" ref="/developers/conventions/code.html"/>
      <item name="Maven JIRA Convention" ref="/developers/conventions/jira.html"/>
      <item name="Making GPG Keys" ref="/developers/release/pmc-gpg-keys.html"/>
      <item name="Release Process" ref="/developers/release/releasing.html"/>
      <item name="Deploy Maven Current References" ref="/developers/website/deploy-maven-current-ref.html"/>
    </item>

    <!-- External -->
    <item name="External Resources" ref="/articles.html" />
  </toc>

  <cover>
    <coverTitle>Apache Maven</coverTitle>
    <coverSubTitle>Current version</coverSubTitle>
    <coverType>User Guide</coverType>
    <projectName>${project.name}</projectName>
    <projectLogo>https://maven.apache.org/images/maventxt_logo_200.gif</projectLogo>
    <companyName>The Apache Software Foundation</companyName>
    <companyLogo>https://www.apache.org/images/asf_logo_wide.png</companyLogo>
  </cover>
</document>
