<?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 those wanting to use Maven to build their project, including a "10 minute test" that gives a
            practical overview of Maven's main features in just 10 minutes and <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 those who want to provide a Maven plugin for shared
            functionality or to accompany their own product or toolset
        </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 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="vertical-align: text-top"/>
        </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>
