Au démarrage d'un projet, il y a toujours cette tâche fastidieuse : initialiser le projet avec tous les composants choisis par l'architecte, la configuration initiale et le tout prêt à développer et à déployer sur le serveur cible.
Maven propose une solution: les archetypes.
Le plugin archetype fournit un ensemble de scripts Velocity permettant de créer rapidement un squelette de projet. Il existe déjà quelques archetypes de projet
On pourra y retrouver des exemples de projets J2EE, des portlets.
Malheureusement, si on veut faire des projets un peu complexes ou représentant un réel développement en entreprise ( ou les deux
), on a besoin de mettre les mains dans le cambouis.
Création de l'archetype
Définition d'un projet exemple.
Sous eclipse ou netbeans , vim pour les puristes , j'ai crée un projet JAVA EE qui me parait cohérent et évolutif. Je le paramètre pour qu'il ait une configuration mavenisée et hop j'ai mon projet démo
├───ears
│ └───ear
│ ├───.settings
│ └───src
│ └───main
│ └───application
│ ├───APP-INF
│ │ ├───classes
│ │ └───lib
│ └───META-INF
├───ejbs
│ └───ejb
│ ├───.settings
│ ├───build
│ │ └───classes
│ │ └───META-INF
│ └───src
│ ├───main
│ │ ├───java
│ │ └───resources
│ │ └───META-INF
│ └───test
│ └───resources
│ └───META-INF
└───guis
└───front-gui
├───.apt_src
├───.settings
├───build
│ ├───classes
│ └───weboutput
│ └───WEB-INF
└───src
└───main
├───java
├───resources
│ └───resources
└───webapp
├───META-INF
└───WEB-INF
├───classes
├───config
└───lib
Les répertoires .settings contiennent les configuration WTP ou BEA WORKSHOP. Il peut être utile de les mettre dans le template afin d'automatiser la configuration initiale.
Initialisation
Comme l'indique le maven book, j'ai crée le squelette de mon archetype avec .... un archetype 
mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-archetype \
-DarchetypeVersion=1.0 \
-DgroupId=com.mycompany \
-DartifactId=my-archetype
Création du squelette
Dans le répertoire /src/main/resources/archetype-resource, je met les sources de mon projet démo. J'ai inséré dans les différents fichiers les paramètres nécessaires à la création du squelette:
Dans les fichiers pom.xml :
- GroupId
- ArtifactId
- version
Voici un exemple de fichier pom.xml avec les paramètres velocity :
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>${groupId}</groupId>
<version>${version}</version>
<artifactId>${artifactId}-parent</artifactId>
<packaging>pom</packaging>
<name>${artifactId} project</name>
<description>Parent Project for ${groupId} / ${artifactId} </description>
....
Je crois que le système est extensible. Vous pouvez rajouter des propriétés à l'execution qui seront automatiquement résolues à la création du squelette.
Paramétrage et définition des meta données
Dans le fichier pom.xml racine ( celui de l'archetype ), mettre les références de l'archetype
Exemple :
<project> <modelVersion>4.0.0</modelVersion> <groupId>mon.groupe</groupId> <artifactId>mon-archetype</artifactId> <version>1.0-SNAPSHOT</version> <packaging>maven-plugin</packaging> </project>
Dans le fichier /src/main/resources/META-INF/maven/archetype.xml indiquer les fichiers à prendre en compte dans le squelette
Exemple :
<archetype>
<id>mon-archetype</id>
<resources>
<!-- Niveau Parent -->
<resource>pom.xml</resource>
<!-- Niveau EAR -->
<resource>ears/pom.xml</resource>
<resource>ears/ear/pom.xml</resource>
<resources>ears/ear/.project</resources>
<resources>ears/ear/.settings/org.eclipse.wst.common.component</resources>
<resources>ears/ear/.settings/org.eclipse.wst.common.project.facet.core.xml </resources>
<!-- Niveau WAR -->
<resource>guis/pom.xml</resource>
<resource>guis/front-gui/pom.xml</resource>
[...]
<!-- Niveau EJB -->
<resource>ejbs/pom.xml</resource>
<resource>ejbs/ejb/pom.xml</resource>
[...]
</resources>
<sources>
</sources>
<allowPartial>true</allowPartial>
</archetype>
Installation et déploiement
A la racine de l'archetype, entrez la commande suivante dans un prompt:
$mvn install $mvn deploy
Création du squelette
Dans un répertoire , lancer la commande
$ mvn archetype:create -DarchetypeGroupId=mon.groupe -DarchetypeArtifactId= mon-archetype -DarchetypeVersion=1.0-SNAPSHOT -DgroupId=test.package -Dartifac tId=testprojet -Dversion=12345
Et la, oh miracle de la technologie moderne, on a un beau projet tout beau 




2 réactions
1 De maveine - 30/01/2008, 22:08
Salut,
j'avais cru avoir trouvé une bonne piste pour enfin mettre en place mon archétype. Ce que tu décris dans ton article c'est également ce que j'ai fait., à l'arborescence près. J'ai une question : pourrais tu me filer les sources de ton archétype pour que j'essaye de l'installer ?
En fait j'ai une arborescence précise à mettre en place, mon archétype est bien installé mais lorsque je souhaite créer un squelette de projet plus rien ne marche (artéfact non trouvé, pourtant dans le repository local tout y est)
Bref avec un exemple qui fonctionne ça pourra certainement m'éclairer.
Pourras tu exhaucer mon souhait?
2 De littlewing - 01/02/2008, 13:41
Salut,
Je pense que tu t es trompe dans la description des meta donnees.
Regarde les sources des archetypes standards maven (ex.maven-archetype-j2ee-simple ) ou dans le livre "Better builds with maven"