<?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.
-->

<faqs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://maven.apache.org/FML/1.0"
  xsi:schemaLocation="http://maven.apache.org/FML/1.0 https://maven.apache.org/xsd/fml-1.0.xsd"
  title="About Maven">
  <part id="about">

    <faq id="m3-goals">
      <question>Tell me about the goals of Maven 3.0</question>
      <answer>
        <p>
          Maven 3.0 is an important internal improvement with following goals:
        </p>
        <ul>
          <li>Backward compatibility</li>
          <li>Performance improvement</li>
          <li>Parallel builds</li>
          <li>Better error and integrity reporting</li>
        </ul>
      </answer>
    </faq>

    <faq id="get-involved">
      <question>Can I get involved?</question>
      <answer>
        <p>
          The Maven project welcomes anyone that wishes to contribute to do so by providing patches to the source code,
          participating in design discussions, or to help out on the users mailing list by answering questions.
        </p>
        <p>
          Frequent contributors recognised by existing committers to the project may be asked if they would like to
          join the project.
        </p>
        <p>
          For instructions on checking out and building Maven 2 and 3, see
          <a href="./guides/development/guide-building-maven.html">Building Maven</a>
          .
        </p>
        <p>
          For more information, please see
          <a href="https://maven.apache.org/guides/development/guide-helping.html">How to Help</a>
          .
        </p>
      </answer>
    </faq>

    <faq id="scripting-languages">
      <question>What plugin languages does Maven support? What about [insert language here]?</question>
      <answer>
        <p>
          As of the current release, Maven supports pure Java and Beanshell. Java is the preferred
          language for it's familiarity and speed.
        </p>
        <p>
          We get asked a lot whether Maven will support other languages, in particular Groovy.
          We will allow the use of Groovy - and virtually any other scripting
          language (if there is demand) if someone can commit a small amount of time to implementing a
          factory for it.
        </p>
        <p>
          Beanshell is more mature, and we want a language that users will find
          answers for when they look, and that when they find bugs, it is
          clearly defined where they actually are.
        </p>
        <p>
          We may consider emphasising a different language if there are compelling technical reasons
          for doing so - if you have a suggestion, feel free to contact the development list.
        </p>
      </answer>
    </faq>

    <faq id="get-help">
      <question>Where do I get help with Maven?</question>
      <answer>
        <p>
          Help for Maven can be obtained by subscribing and posting to the
          <a href="https://maven.apache.org/mailing-lists.html">Maven Users List</a>.
        </p>
        <p>
          You can also join us on IRC (Internet Relay Chat) at <code>irc.freenode.net</code>
          on <code>#maven</code>. 
          over <a href="irc://irc.freenode.net/#maven">IRC</a>
          for those behind firewalls (enter <code>#maven</code> in the <i>Channel</i> box).
        </p>
      </answer>
    </faq>
  </part>
</faqs>

