<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
  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.
-->
<html>
<head>
    <title>View Source - Codehaus</title>


    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="-1">
    <script language="javascript">
        var contextPath = '';
        var i18n = [];
    </script>

                            <link rel="stylesheet" href="/s/811/1/3/_/styles/main-action.css" type="text/css" />

            <meta name="robots" content="noindex,nofollow">
        <meta name="robots" content="noarchive">
        <link rel="shortcut icon" href="/images/icons/favicon.ico">
    <link rel="icon" type="image/png" href="/images/icons/favicon.png">

            <script type="text/javascript" src="/s/811/1/_/decorators/effects.js"></script>




</head>
<body onload="placeFocus()">

<div id="PageContent">
    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%">
        <tr>
            <td valign="top" class="pagebody">
                <div class="pageheader">
                    <span class="pagetitle">View Source</span>
                </div>

                <div class="monospaceInput"><div class="padded">
        This page will hold the complete list of archetype (even not hosted at apache).
<br>
<br>Each archetype page should enforce the following pattern :
<br>* Archetype name
<br>* Command line to call the archetype
<br>* If the archetype can be used in an existing projects directory
<br>* A tree view of the resulting files
<br>* Some additional information like the additional properties used by the plugin
<br>
<br>To use an archetype:
<br>{code}
<br>mvn archetype:create -DgroupId=&lt;your group&gt; -DartifactId=&lt;your artifact&gt; -DarchetypeArtifactId=&lt;wanted artifact&gt; -DarchetypeGroupId=&lt;wanted artifact group&gt;
<br>{code}
<br>Read more [here|http://maven.apache.org/plugins/maven-archetype-plugin/usage.html].
<br>
<br>h3. Quick Reference
<br>
<br>A quick reference of available archetypes and their repositories.  This list is designed so it can be automatically retrieved from archetype front-ends such as Archy - [http://code.google.com/p/archy].  Only archetypes that don&#39;t have any &quot;released&quot; artifacts need a version number.
<br>|| Artifact || Group || Version || Repository || Description ||
<br>| appfuse-basic-jsf | org.appfuse.archetypes | 2.0 | [http://static.appfuse.org/releases] | AppFuse archetype for creating a web application with Hibernate, Spring and JSF |
<br>| maven-archetype-profiles | org.apache.maven.archetypes | | [https://repo.maven.apache.org/maven2] | |
<br>| struts2-archetype-starter | org.apache.struts | 2.0.9-SNAPSHOT | [http://people.apache.org/repo/m2-snapshot-repository] | A starter Struts 2 application with Sitemesh, DWR, and Spring |
<br>| maven-archetype-har | net.sf.maven-har | 0.9 | | [Hibernate|http://hibernate.org] Archive |
<br>| maven-archetype-archetype | org.apache.maven.archetypes | | | |
<br>
<br>h3. Additional Information
<br>
<br>* There is a maven-archetypes project on java.net:
<br>** [https://maven-archetypes.dev.java.net/]
<br>** [https://maven-archetypes.dev.java.net/source/browse/maven-archetypes/trunk/archetypes/org/jvnet/archetypes/]
<br>
<br>* Webtide has some archetypes available for download and installation locally.  (Not in a public repository as far as I know.)
<br>** [http://www.webtide.com/resources.jsp]
<br>
<br>* A SEAM archetype is available from Lunar Logic
<br>** [http://www.nabble.com/Announcement%3A-Seam-Archetype-t2735410s177.html]
<br>** [http://www.lunarlogic.com/blog/show/maven_archetype_for_jboss_seam]
<br>* JSF archetypes from SoftEU
<br>** [http://software.softeu.cz/archetypes/jsf/] JSF+Facelets
<br>** [http://software.softeu.cz/archetypes/seam/] JSF+Facelets+Seam ([http://software.softeu.cz/seam/] Maven Seam integration)
<br>** [http://software.softeu.cz/archetypes/seam-simple/] JSF+Facelets+Seam (no hibernate)
    </div></div>
            </td>
        </tr>
    </table>
</div>

  	                                                    <div class="license license-nonprofit">
                    Site powered by a free <b>Open Source Project / Non-profit License</b> (<a href="http://www.atlassian.com">more</a>) of <b><a href="/c/conf/10138">Confluence - the Enterprise wiki</a>.<br/> <a href="http://www.atlassian.com">Learn more</a> or <a href="/c/conf/10137">evaluate Confluence for your organisation</a>.
                    </div>
                                            <div class="bottomshadow"></div>

</body>
</html>