<?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 2.0">
  <part id="about">
    <faq id="m2-goals">
      <question>Tell me about the goals of Maven 2.0</question>
      <answer>
        <p>
          In addition to understanding the
          <a href="./what-is-maven.html">Goals of Maven</a>
          there have also been questions about why Maven 2.0 is rewritten from the successful Maven 1.0.
          In summary, the main goals of the new Maven 2.0 architecture are:
        </p>
        <ul>
          <li>To be simple to use - it should be more obvious and consistent about how things are working</li>
          <li>Fast - a new architecture and smaller memory footprint make it as fast as possible</li>
          <li>To be able to implement the features demanded were not possible under the Maven 1.0 architecture</li>
        </ul>
        <p>
          Unfortunately, to reach these goals we've had to sacrifice backwards compatibility. Instead of
          making many small incremental changes that would break compatibility often over time, we decided to build on a
          new, solid base that can be reliable for the future, and also to maintain the existing Maven 1.x product to
          ensure that existing users are not left out in the cold.
        </p>
      </answer>
    </faq>

    <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 will Maven 2.0 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 2.0 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>
          We would recommend waiting for Groovy to have a 1.0 release so the API
          (and language!) is stable. What we will not be doing is actively
          supporting it (in terms of answering questions about how to use it)
          like we currently do for Jelly in Maven 1.x.
        </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 2 &amp; 3?</question>
      <answer>
        <p>
          Help for both Maven 1.0 and Maven 2 &amp; 3 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>

