 ------
 Maven Archetypes
 ------
 Jason van Zyl
 ------
 2009-08-26
 ------

~~ 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/guides/mini/guide-apt-format.html

Maven Archetypes

  Maven provides several achetype artifacts:

*-----------------------------------------------------------------+----------------+
|| Archetype ArtifactIds                                          || Description   ||
*-----------------------------------------------------------------+----------------+
| {{{./maven-archetype-archetype/}maven-archetype-archetype}}     | An archetype to generate a sample archetype. |
*-----------------------------------------------------------------+----------------+
| {{{./maven-archetype-j2ee-simple/}maven-archetype-j2ee-simple}} | An archetype to generate a simplifed sample J2EE application. |
*-----------------------------------------------------------------+----------------+
| maven-archetype-mojo (deprecated)                               | Deprecated in favour of maven-archetype-plugin, which has a better name. |
*-----------------------------------------------------------------+----------------+
| {{{./maven-archetype-plugin/}maven-archetype-plugin}}           | An archetype to generate a sample Maven plugin. |
*-----------------------------------------------------------------+----------------+
| {{{./maven-archetype-plugin-site/}maven-archetype-plugin-site}} | An archetype to generate a sample Maven plugin site. |
*-----------------------------------------------------------------+----------------+
| {{{./maven-archetype-portlet/}maven-archetype-portlet}}         | An archetype to generate a sample JSR-268 Portlet. |
*-----------------------------------------------------------------+----------------+
| {{{./maven-archetype-quickstart/}maven-archetype-quickstart}}   | An archetype to generate a sample Maven project. |
*-----------------------------------------------------------------+----------------+
| {{{./maven-archetype-simple/}maven-archetype-simple}}           | An archetype to generate a simple Maven project. |
*-----------------------------------------------------------------+----------------+
| {{{./maven-archetype-site/}maven-archetype-site}}               | An archetype to generate a sample Maven site which demonstrates some of the supported document types like APT, XDoc, and FML and demonstrates how to i18n your site. |
*-----------------------------------------------------------------+----------------+
| {{{./maven-archetype-site-simple/}maven-archetype-site-simple}} | An archetype to generate a sample Maven site. |
*-----------------------------------------------------------------+----------------+
| {{{./maven-archetype-webapp/}maven-archetype-webapp}}           | An archetype to generate a sample Maven Webapp project. |
*-----------------------------------------------------------------+----------------+
