Generation

Generating a project from an archetype involves three steps:

  • the selection of the archetype,
  • the configuration of that archetype,
  • the effective generation of the project based on the collected information.

At the end of these steps, you have a Maven 2 project generated in a defined directory.

It is possible to use the generation plugin in batch mode.

Archetype selection

During this step, you are successivly prompted to:

  • select the group the archetype belongs to,
  • select the archetype you want to use,
  • select the version of that archetype,
  • confirm the selection.

A property file containing the archetype definition is written at the end of this step.

The list of archetypes and versions are retrieved from the Maven repositories. The list of groups is retrieved using default values and a registry file.

Archetype configuration

During this step, you are successivly prompted to:

  • define each of the common properties (project's groupId, artifactId, version and packageName),
  • define each of the archetype required properties,
  • confirm the configuration.

The property file containing the archetype definition is enhanced with the configuration at the end of this step.

Project generation

During this step, the plugin generates the project based on the archetype choosen and the configuration defined.

Example of use

To generate a project, call mvn archetypeng:create.

[rafale@fixe test]$ tree
.

0 directories, 0 files

Ensuring an empty directory.

[rafale@fixe test]$ mvn archetypeng:create
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetypeng'.
[INFO] artifact org.codehaus.mojo:maven-archetypeng-plugin: checking for updates from central
[INFO] ----------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO]    task-segment: [archetypeng:create] (aggregator-style)
[INFO] ----------------------------------------------------------------------------
[INFO] Preparing archetypeng:create
[INFO] [archetypeng:select-archetype]

The first step of the generation: select-archetype

Choose group:
1: org.apache.maven.archetypes
2: org.codehaus.mojo.archetypes
Choose a number:  (1/2): 2

The org.codehaus.mojo.archetypes group is choosen.

[INFO] org.codehaus.mojo.archetypes: checking for updates from central
Choose archetype:
1: Starting Archetype (org.codehaus.mojo.archetypes:maven-archetypeng-start)
2: Archetype Archetype (org.codehaus.mojo.archetypes:maven-archetypeng-archetype)
3: Plugin Archetype (org.codehaus.mojo.archetypes:maven-archetypeng-maven-plugin)
4: Site Archetype (org.codehaus.mojo.archetypes:maven-archetypeng-site)
Choose a number:  (1/2/3/4): 1

The Starting Archetype is choosen

[INFO] org.codehaus.mojo.archetypes.maven-archetypeng-start: checking for updates from central
Choose version:
1: 1.0-SNAPSHOT
Choose a number:  (1): 1

The 1.0-SNAPSHOT version is choosen.

Confirm archetype selection:
org.codehaus.mojo.archetypes/Starting Archetype
 (Y/N) Y: : Y

The selection is confirmed.

[INFO] [archetypeng:configure-generation]

The second step of the generation: configure-generation

Define value for groupId: : org.codehaus.mojo.archetypeng.test
Define value for artifactId: : test-start
Define value for version: : 1.0-SNAPSHOT
Define value for package: : org.codehaus.mojo.archetypeng.test.start

Each of the common properties are answered.

Confirm properties configuration:
groupId: org.codehaus.mojo.archetypeng.test
artifactId: test-start
version: 1.0-SNAPSHOT
package: org.codehaus.mojo.archetypeng.test.start
 Y: : Y

The archetype configuration is confirmed.

[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.

The third step loads velocity.

[INFO] [archetypeng:generate-project]

The third step do the work without any comment.

[INFO] [archetypeng:create]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 minutes 8 seconds
[INFO] Finished at: Sun Mar 11 22:11:28 CET 2007
[INFO] Final Memory: 10M/25M
[INFO] ------------------------------------------------------------------------

The resuting project is generated in a directory named with the artifactId property answered.

[rafale@fixe test]$ tree
archetype.properties  test-start/
[rafale@fixe test]$ tree test-start
test-start
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- org
    |           `-- codehaus
    |               `-- mojo
    |                   `-- archetypeng
    |                       `-- test
    |                           `-- start
    |                               `-- App.java
    `-- test
        `-- java
            `-- org
                `-- codehaus
                    `-- mojo
                        `-- archetypeng
                            `-- test
                                `-- start
                                    `-- AppTest.java

17 directories, 3 files

Batch mode

To enable the batch mode and remove the prompts, just run mvn archetypeng:generate -B.

The batch mode wiil need the same answers as the interactive mode. These answers are provided in a property file named archetype.properties in the execution directory or set using the command line property -Darchetype.properties=path/to/archetype.properties.

Here is an example of archetype.properties file (the one generated by the interactive generation :-)).

[rafale@fixe test]$ cat archetype.properties
#
#Sun Mar 11 22:11:28 CET 2007
archetype.artifactId=maven-archetypeng-start
archetype.groupId=org.codehaus.mojo.archetypes
archetype.version=1.0-SNAPSHOT
groupId=org.codehaus.mojo.archetypeng.test
artifactId=test-start
version=1.0-SNAPSHOT
package=org.codehaus.mojo.archetypeng.test.start

Here is the plugin execution.

[rafale@fixe test]$ tree
.
`-- archetype.properties

0 directories, 1 file

Ensure the property file exists.

[rafale@fixe test]$ mvn archetypeng:create -B
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetypeng'.
[INFO] ----------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO]    task-segment: [archetypeng:create] (aggregator-style)
[INFO] ----------------------------------------------------------------------------
[INFO] Preparing archetypeng:create
[INFO] [archetypeng:select-archetype]
[INFO] Archetype selected (org.codehaus.mojo.archetypes:maven-archetypeng-start:1.0-SNAPSHOT)
[INFO] [archetypeng:configure-generation]
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[INFO] [archetypeng:generate-project]
[INFO] [archetypeng:create]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5 seconds
[INFO] Finished at: Sun Mar 11 23:07:53 CET 2007
[INFO] Final Memory: 10M/27M
[INFO] ------------------------------------------------------------------------

The project tree is the same as in the interactive mode.