Maven Archetypes are the "templates" by which you can quickly generate a running example of a given framework or project type. I am trying to compile a list of all the Maven archetype catalogs currently active on the net.
From the Maven documentation about catalog files:
Knowledge about archetypes are stored in catalogs.
The catalogs are xml files.
The Archetype Plugin comes bundled with an internal catalog. This one is used by default.
The Archetype Plugin can use catalogs from local filesystem and from HTTP connections.
So far, I've gathered this list of repositories that do publish catalogs, but would love to see if anyone knows of more:
mvn archetype:generate
-DarchetypeCatalog=local
-DarchetypeCatalog=remote
-DarchetypeCatalog=http://repo.fusesource.com/maven2
-DarchetypeCatalog=http://cocoon.apache.org
-DarchetypeCatalog=http://download.java.net/maven/2
-DarchetypeCatalog=http://myfaces.apache.org
-DarchetypeCatalog=http://tapestry.formos.com/maven-repository
-DarchetypeCatalog=http://scala-tools.org
-DarchetypeCatalog=http://www.terracotta.org/download/reflector/maven2/
Links to same: 1) FuseSource 2) Cocoon 3) Java.net 4) MyFaces 5) Tapestry 6) Scala Catalog 7) Terracotta Catalog
You'll notice that if the repository actually publishes an archetype catalog (all of the above do), you'll get a UI prompt of all the choices found in that archetype-catalog.xml
. For example:
mvn archetype:generate -DarchetypeCatalog=http://scala-tools.org
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: http://scala-tools.org -> scala-archetype-simple (A simple scala project)
2: http://scala-tools.org -> lift-archetype-blank (A blank/empty liftweb project)
3: http://scala-tools.org -> lift-archetype-basic (A basic liftweb project (with DB, css, ...))
Choose a number: (1/2/3):
If you want to view the Scala catalog file directly for example, you can browse to http://scala-tools.org/archetype-catalog.xml
But if the repository doesn't provide an archetype-catalog.xml, then just as PascalT says, you'll need to know the name in advance (much less convenient) and pass it in command line arguments.
Terracotta has one but I don't know the url off-hand...will post back. Also, I have used archetypes in the past from AppFuse (http://static.appfuse.org/releases/) and Webtide although I don't know where to find their archetype catalogs.
The Terracotta repository and catalog are here: http://www.terracotta.org/download/reflector/maven2/
Perhaps this is useful: http://docs.codehaus.org/display/MAVENUSER/Archetypes+List
For Maven Archetype list refer this link http://www.myjeeva.com/2012/06/exclusive-maven-archetype-list/ (you will find around 607 Archetypes).
While using
mvn archetype:generate
command at question ofChoose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 197:
provide archetype number from above link.
Note: default value is 197
The nexus index that is produced by Nexus and consumed by M2eclipse knows about all the archetypes and lets you choose them when you create a new maven project from the ide.
To be honest, I don't really see the point of building a list of all catalogs. It looks more "natural" to me to pick a project first and then add the catalog if required. This is why there is IMO more value in a list of archetypes. You'll need their name anyway, even if you have all catalogs in a list.Anyway, here are some candidates;
Edit: after Matthew clarification on archetype's catalogs.
I misunderstood some concepts and my answer isn't clear and correct.
The point of catalogs is exactly to not have to know the names of archetypes in advance. They are made to publish archetypes and allow
mvn archetype:generate
to list archetypes. So it makes sense to add "external" catalogs (understand not in the internal) to get a wider list of known archetypes when usingmvn archetype:generate
.For archetypes without a catalog, users have to type an horrible command that must be documented somewhere (because it requires knowledge of the artifact).
Regarding my propositions:
Atlassian's archetypes are in the internal catalog. Not a good proposition.
Grails archetypes aren't in the internal catalog or in a published
archetype-catalog.xml
. Not a good proposition.ServiceMix has catalogs here http://servicemix.apache.org/tooling/ (based on a
http://servicemix.apache.org/tooling/<version>/archetype-catalog.xml
pattern). Valid proposition.One fun thing I learned while digging this. The maven guys provides a nice tool that helps people developing archetypes to create a catalog XML: the
archetype:crawl
goal basically crawls a local Maven repository searching for Archetypes and generates/updates aarchetype-catalog.xml
file in~/.m2/repository
by default. Projects, people just have to run periodically something like:Grails doesn't provide a catalog. To create a project, we have to run:
But once we did this, we have the archetype in our local repository. So if we type:
The archetype get listed in
~/.m2/archetype-catalog.xml
and we can now use themvn archetype:generate
for Grails too (see option 5):This is of course a (hugly) workaround and it might have side effects (you won't see new versions of archetypes). Actually, I don't think the archetype:crawl goal is intended for this use. I would like all projects them to publish their archetypes.
There's yet another resource at Codehaus for a very robust list of archetypes out there on the 'net. http://docs.codehaus.org/display/MAVENUSER/Archetypes+List