blob: 0f10ae147a090b01e5413f5723ce1953a3bef77c [file] [log] [blame]
------
Guide to Creating Archetypes
------
Jason van Zyl, Alexander Hars, Franz Allan Valencia See
------
2010-04-10
------
~~ 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
Guide to Creating Archetypes
Creating an archetype is a pretty straight forward process. An archetype is a
very simple artifact, that contains the project prototype you wish to create.
An archetype is made up of:
* an {{{/archetype/archetype-models/archetype-descriptor/archetype-descriptor.html}archetype descriptor}}
(<<<archetype-metadata.xml>>> in directory:
<<<src/main/resources/META-INF/maven/>>>). It lists all the files that will be
contained in the archetype and categorizes them so they can be processed
correctly by the archetype generation mechanism.
* the prototype files that are copied by the archetype plugin (directory:
<<<src/main/resources/archetype-resources/>>>)
* the prototype pom (<<<pom.xml>>> in:
<<<src/main/resources/archetype-resources>>>)
* a pom for the archetype (<<<pom.xml>>> in the archetype's root directory).
[]
To create an archetype follow these steps:
* 1. Create a new project and pom.xml for the archetype artifact
An example <<<pom.xml>>> for an archetype artifact looks as follows:
+----+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.groupId</groupId>
<artifactId>my-archetype-id</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-archetype</packaging>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>3.1.1</version>
</extension>
</extensions>
</build>
</project>
+----+
All you need to specify is a <<<groupId>>>, <<<artifactId>>> and
<<<version>>>. These three parameters will be needed later for invoking the
archetype via <<<archetype:generate>>> from the commandline.
* 2. Create the archetype descriptor
The {{{/archetype/archetype-models/archetype-descriptor/archetype-descriptor.html}archetype descriptor}}
is a file called <<<archetype-metadata.xml>>> which must be
located in the <<<src/main/resources/META-INF/maven/>>> directory. An example of an archetype
descriptor can be found in the quickstart archetype:
+----+
<archetype-descriptor
xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0
https://maven.apache.org/xsd/archetype-descriptor-1.1.0.xsd"
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
name="quickstart">
<fileSets>
<fileSet filtered="true" packaged="true">
<directory>src/main/java</directory>
</fileSet>
<fileSet>
<directory>src/test/java</directory>
</fileSet>
</fileSets>
</archetype-descriptor>
+----+
The attribute <<<name>>> tag should be the same as the <<<artifactId>>> in the
archetype <<<pom.xml>>>.
The boolean attribute <<<partial>>> show if this archetype is representing a full Maven project or only parts.
The <<<requiredProperties>>>, <<<fileSets>>> and <<<modules>>> tags represent the differents parts of the project:
* <<<\<requiredProperties\>>>> : List of required properties to generate a project from this archetype
* <<<\<fileSets\>>>> : File sets definition
* <<<\<modules\>>>> : Modules definition
[]
At this point one can only specify individual files to be created but not empty
directories.
Thus the quickstart archetype shown above defines the following directory
structure:
----
archetype
|-- pom.xml
`-- src
`-- main
`-- resources
|-- META-INF
| `-- maven
| `--archetype-metadata.xml
`-- archetype-resources
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- App.java
`-- test
`-- java
`-- AppTest.java
----
* 3. Create the prototype files and the prototype pom.xml
The next component of the archetype to be created is the prototype
<<<pom.xml>>>. Any <<<pom.xml>>> will do, just don't forget to the set
<<<artifactId>>> and <<<groupId>>> as variables ( <<<$\{artifactId\}>>> /
<<<$\{groupId\}>>> ). Both variables will be initialized from the commandline
when calling <<<archetype:generate>>>.
An example for a prototype <<<pom.xml>>> is:
+----+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<packaging>jar</packaging>
<name>${artifactId}</name>
<url>http://www.myorganization.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
+----+
* 4. Install the archetype and run the archetype plugin
Now you are ready to install the archetype:
+----+
mvn install
+----+
Now that you have created an archetype, you can try it on your local system by
using the following command. In this command, you need to specify the full
information about the archetype you want to use (its <<<groupId>>>, its
<<<artifactId>>>, its <<<version>>>) and the information about the new project
you want to create (<<<artifactId>>> and <<<groupId>>>). Don't forget to
include the version of your archetype (if you don't include the version, you
archetype creation may fail with a message that version:RELEASE was not found)
+----+
mvn archetype:generate \
-DarchetypeGroupId=<archetype-groupId> \
-DarchetypeArtifactId=<archetype-artifactId> \
-DarchetypeVersion=<archetype-version> \
-DgroupId=<my.groupid> \
-DartifactId=<my-artifactId>
+----+
Once you are happy with the state of your archetype, you can deploy (or submit
it to {{{/guides/mini/guide-central-repository-upload.html}Maven Central}})
it as any other artifact and the archetype will then be
available to any user of Maven.
* Alternative way to start creating your Archetype
Instead of manually creating the directory structure needed for an archetype,
simply use
+------+
mvn archetype:generate
-DgroupId=[your project's group id]
-DartifactId=[your project's artifact id]
-DarchetypeGroupId=org.apache.maven.archetypes
-DarchetypeArtifactId=maven-archetype-archetype
+------+
Afterwhich, you can now customize the contents of the <<<archetype-resources>>>
directory, and <<<archetype-metadata.xml>>>, then, proceed to Step#4 (Install the archetype and run
the archetype plugin).