 ------
 Create a Project from an Archetype
 ------
 Raphaël Piéroni
 ------
 2011-09-30
 ------

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

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html


What is done during the creation of a project?

* Archetype selection

    First, the Archetype Plugin asks the user to select an archetype from a list
    of known archetypes. Archetypes are found in archetype catalogs.

* Archetype configuration

    Then the Archetype Plugin asks the user to provide values for each of the
    four main required properties, which are the project's groupId, artifactId,
    version and package.

    It also asks for values for the additional required properties defined in the
    archetype's metadata file.

* Project generation

    Finally, the Archetype Plugin generates the Maven project from the
    selected/configured archetype.

    The archetype used to generate the project can be single or multi-module.

    The archetype used to generate the project can be partial, which means it
    enhances an existing project instead of creating a new one.

    If the Archetype Plugin is called from an existing project, using a
    complete (not partial) archetype, then it generates a sub module in the
    existing project.

    If the Archetype Plugin is configured to create a project in an existing
    directory, it first checks for the existence of a <<<pom.xml>>> file before
    failing the generation.

* Batch mode

    It is possible to call the Archetype Plugin to generate a project in batch
    mode (to get rid of the prompting). This is achieved by providing the
    Archetype Plugin with all the needed values as system properties.

    * <<<archetypeCatalog>>> which specifies the catalog(s).
       The valid catalogs are: <<<internal>>> (the default), <<<local>>>, <<<remote>>>.

       * <<<internal>>> uses an internal catalog

       * <<<local>>> uses the <<<archetype-catalog.xml>>> file from the local repository

       * <<<remote>>> uses the <<<archetype-catalog.xml>>> from Maven Central, either direct or via a repository manager 
         file

       []

    * <<<archetypeGroupId>>> specifies the groupId of the archetype to use

    * <<<archetypeArtifactId>>> specifies the artifactId of the archetype to use

    * <<<archetypeVersion>>> specifies the version of the archetype to use

    * <<<archetypeRepository>>> specifies the repository in which the archetype
      resides

    * <<<groupId>>> specifies the groupId of the generated project

    * <<<artifactId>>> specifies the artifactId of the generated project

    * <<<version>>> specifies the version of the generated project

    * <<<package>>> specifies the package for the sources of the generated
      project

    * <<<anotherVelocityProperty>>> specifies any other required property

    []

* Behind a Proxy

    Being behind a proxy is automatically configured by Maven.
