<?xml version="1.0"?>
<!--

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>
  <properties>
    <title>Welcome to Apache Maven</title>
    <author email="brett@apache.org">Brett Porter</author>
    <author email="jason@takari.io">Jason van Zyl</author>
    <author email="olamy@apache.org">Olivier Lamy</author>    
  </properties>
  <body>

    <section name="Welcome to Apache Maven">

      <!-- TODO: I reckon it's time for a new description -->
      <p>
        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.
      </p>
      <p>
        If you think that Maven could help your project, you can find out more information in the "About Maven"
        section of the navigation. This includes an in-depth description of <a href="what-is-maven.html">what Maven is</a> and
        a <a href="maven-features.html">list of some of its main features</a>.
      </p>
      <p>
        <!-- TODO: this could be the big button type thing instead of a list of links -->
        This site is separated into the following sections, depending on how you'd like to use Maven:
      </p>
      <!-- TODO: use CSS -->
      <table>
      <tr>
        <th style="white-space:nowrap; font-weight: bold; font-size: 1.75em" rowspan="2">Use</th>
        <th style="white-space:nowrap; font-weight: bold; font-size: 1.25em">
          <a href="download.html">Download</a>, <a href="install.html">Install</a>, <a href="run.html">Run</a> Maven
        </th>
        <th style="white-space:nowrap; font-weight: bold; font-size: 1.25em">
          <a href="configure.html">Configure</a>, <a href="users/index.html">Use</a> Maven and <a href="plugins/index.html">Maven Plugins</a>
        </th>
      </tr>
      <tr>
        <td>Information for those needing to build a project that uses Maven</td>
        <td>
            Information for developers using Maven to build their project, including a "10 minute test" that gives a
            practical overview of Maven's main features and a <a href="plugins/index.html">plugin list</a>
            for more information on each plugin.
        </td>
      </tr>
      <tr>
        <th style="white-space:nowrap; font-weight: bold; font-size: 1.75em" rowspan="2">Extend</th>
        <th style="white-space:nowrap; font-weight: bold; font-size: 1.25em"><a href="plugin-developers/index.html">Write Maven Plugins</a></th>
        <th style="white-space:nowrap; font-weight: bold; font-size: 1.25em"><a href="repository/index.html">Improve the Maven Central Repository</a></th>
      </tr>
      <tr>
        <td>
            Information for developers writing Maven plugins.
        </td>
        <td>
            Information for those who may or may not use Maven, but are interested in getting project metadata into the
            <a href="repository/index.html">central repository</a>.
        </td>
      </tr>
      <tr>
        <th style="white-space:nowrap; font-weight: bold; font-size: 1.75em" rowspan="2">Contribute</th>
        <th style="white-space:nowrap; font-weight: bold; font-size: 1.25em"><a href="guides/development/guide-helping.html">Help Maven</a></th>
        <th style="white-space:nowrap; font-weight: bold; font-size: 1.25em"><a href="developers/index.html">Develop Maven</a></th>
      </tr>
      <tr>
        <td>
            Information if you'd like to get involved. Maven is an open source community and welcomes contributions.
        </td>
        <td>
            Information for those who are currently Maven developers, or who are interested
            in contributing to the Maven project itself.
        </td>
      </tr>
      </table>
      <p>
        Each guide is divided into a number of trails to get you started on a particular topic, and includes a
        reference area and a "cookbook" of common examples.
      </p>
      <p>
        You can access the guides at any time from the left navigation.
        If you are looking for a quick reference, you can use the <a href="guides/index.html">documentation index</a>.
      </p>

      <h3>How to Get Support</h3>
      <p>
        Support for Maven is available in a variety of different forms.
      </p>
      <p>
        To get started, search the documentation,
        <a href="issue-management.html">issue management system</a>, the <a href="https://cwiki.apache.org/confluence/display/MAVEN">wiki</a>
        or the <a href="mailing-lists.html">mailing list archives</a> to
        see if the problem has been solved or reported before.
      </p>
      <p>
        If the problem has not been reported before, the recommended way to get help is to
        subscribe to the <a href="mailing-lists.html">Maven Users Mailing list</a>. Many other users and Maven developers
        will answer your questions there, and the answer will be archived for others in the future.
      </p>
      <p>
        You can also reach the Maven developers on <a href="community.html">IRC</a>.
      </p>

      <h3>Apache Software Foundation</h3>
      <p>
        Maven is a part of the Apache Software Foundation. We'd like to <a href="https://www.apache.org/foundation/thanks.html">thank
        the sponsors</a> that provide financial assistance to the foundation. For more information on how you can support the
        foundation, see the <a href="https://www.apache.org/foundation/sponsorship.html">sponsorship</a> page.
      </p>
      <p>
        <a href="https://www.apache.org/events/current-event.html">
          <img src="https://www.apache.org/events/current-event-234x60.png" alt="Apache Events" style="float: left"/>
        </a>
        You can also attend <a href="https://www.apache.org/events/current-event.html">Apache Events</a>. Don't hesitate to ask on the <a href="mailing-lists.html">Maven User mailing list</a>
        if Maven team members will be there. It can be a great opportunity to meet them.
      </p>
    </section>
  </body>
</document>
