Guide de l’archétype Maven

Guide de l'archétype Maven

1. Vue d'ensemble

Un archétype Maven est une abstraction d'un type de projet qui peut être instancié dans un projet Maven personnalisé et concret. En bref,it’s a template project template from which other projects are created.

L’utilisation d’archétypes a pour principal avantage de normaliser le développement de projets et de permettre aux développeurs de suivre facilement les meilleures pratiques tout en amorçant leurs projets plus rapidement.

Dans ce didacticiel, nous verrons comment créer un archétype personnalisé, puis comment l'utiliser pour générer un projet Maven via lesmaven-archetype-plugin.

2. Descripteur de l'archétype Maven

The Maven archetype descriptor is the heart of the archetype project. Il s’agit d’un fichier XML nomméarchetype-metadata.xml et situé dans le répertoireMETA-INF/maven du fichier jar.

Il est utilisé pour décrire les métadonnées des archétypes:



    
        
            bar
        
    

    
        
            src/main/java
            
                **/*.java
            
        
    

    
        
    

La baliserequiredProperties est utilisée pour fournir des propriétés lors de la génération du projet. Ainsi, nous serons invités à leur fournir des valeurs, avec le choix d'accepter la valeur par défaut.

fileSets, d'autre part, sont utilisés pour configurer les ressources qui seront copiées dans le projet concret généré. Un fichier filtré signifie que les espaces réservés seront remplacés par les valeurs fournies au cours du processus de génération.

Et, en utilisantpackaged=”true” dans lesfileSet, nous disons que les fichiers sélectionnés seront ajoutés à la hiérarchie de dossiers spécifiée par la spropertypackage .

Si nous voulons générer un projet multi-module, alors la balisemodules peut aider à configurer tous les modules du projet généré.

Notez que ce fichier concerne Archetype 2 et supérieur. Dans la version 1.0.x, le fichier s'appelait simplementarchetype.xml et avait une structure différente.

Pour plus d'informations, jetez un œil auxofficial Apache docs.

3. Comment créer un archétype

An archetype is a normal Maven project with the following extra content:

  • src/main/resources/archetype-resources est le modèle à partir duquel les ressources sont copiées dans le projet nouvellement créé

  • src/main/resources/META-INF/maven/archetype-metadata.xml: est le descripteur utilisé pour décrire les métadonnées des archétypes

Pour créer un archétype manuellement, nous pouvons commencer avec un projet Maven nouvellement créé, puis ajouter les ressources mentionnées ci-dessus.

Ou, nous pouvons le générer en utilisant le sablearchetype-maven-plugin, puis personnaliser le contenu du répertoirearchetype-resources et du fichierarchetype-metadata.xml.

Pour générer l'archétype, nous pouvons utiliser:

mvn archetype:generate -B -DarchetypeArtifactId=maven-archetype-archetype \
  -DarchetypeGroupId=maven-archetype \
  -DgroupId=com.example \
  -DartifactId=test-archetype

Nous pouvons également créer l'archétype à partir d'un projet Maven existant:

mvn archetype:create-from-project

Il est généré entarget/generated-sources/archetype, prêt à être utilisé.

Quelle que soit la manière dont nous avons créé l'archétype, nous nous retrouverons avec la structure suivante:

archetype-root/
├── pom.xml
└── src
    └── main
        ├── java
        └── resources
            ├── archetype-resources
            │   ├── pom.xml
            │   └── src
            └── META-INF
                └── maven
                    └── archetype-metadata.xml

Nous pouvons maintenant commencer à construire notre archétype en mettant les ressources dans le répertoirearchetype-resources et en les configurant dans le fichierarchetype-metadata.xml.

4. Construire l'archétype

Nous sommes maintenant prêts à personnaliser notre archétype. Pour le point culminant de ce processus, nous allons présenter la création d'un archétype Maven simple pour générer une application RESTful basée sur JAX-RS 2.1.

Appelons-le simplementmaven-archetype.

4.1. Emballage d'archétype

Commençons par modifier lepom.xml du projet archétype situé sousthe maven-archetype directory:

maven-archetype

Ce type d'emballage est disponible grâce à l'extensionarchetype-packaging:


    
        
            org.apache.maven.archetype
            archetype-packaging
            3.0.1
        
    
    

4.2. Ajout despom.xml

Créons maintenant un fichierpom.xml situé sous le répertoirearchetype-resources:



    ${groupId}
    ${artifactId}
    ${version}
    war

    
        
            javax.ws.rs
            javax.ws.rs-api
            2.1
            provided
        
    

Comme on peut le voir,groupId, artifactId etversion sont paramétrés. Ils seront remplacés lors de la création d'un nouveau projet à partir de cet archétype.

Nous pouvons mettre tout ce qui est nécessaire au projet généré, comme les dépendances et les plugins, dans lespom.xml. Ici, nous avons ajouté la dépendance JAX RS car l'archétype sera utilisé pour générer une application basée sur RESTful.

4.3. Ajouter les ressources requises

Ensuite, nous pouvons ajouter du code Java pour notre application dansarchetype-resources/src/main/java.

Une classe pour configurer l'application JAX-RS:

package ${package};
// import
@ApplicationPath("${app-path}")
public class AppConfig extends Application {
}

Et une classe pour une ressource ping:

@Path("ping")
public class PingResource{
    //...
}

Enfin, placez le fichier de configuration du serveur,server.xml, dansarchetype-resources/src/main/config/liberty.

4.4. Configurer les métadonnées

Après avoir ajouté toutes les ressources nécessaires, nous pouvons maintenant configurer celles qui seront copiées lors de la génération via le fichierarchetype-metadata.xml.

Nous pouvons dire à notre archétype que nous voulons que tous les fichiers source Java soient copiés:



    
    
        
            src/main/java
            
                **/*.java
            
        
        
            src/main/config/liberty
            
                server.xml
            
        
    

Ici, nous voulons que tous les fichiers Java du répertoiresrc/main/java et le fichierserver.xml desrc/main/config/liberty, soient copiés.

4.5. Installer l'archétype

Maintenant que nous avons fini de tout assembler, nous pouvons installer l'archétype en appelant cette commande:

mvn install

À ce stade, l'archétype est enregistré dans le fichierarchetype-catalog.xml, situé dans le référentiel local Maven, et donc prêt à être utilisé.

5. Utiliser l'archétype installé

The maven-archetype-plugin allows the user to create a Maven project through the generate goal and existing archetype. Pour plus d'informations sur ce plugin, vous pouvez visiter le sitehomepage.

Cette commande utilise ce plugin pour générer un projet Maven à partir de notre archétype:

mvn archetype:generate -DarchetypeGroupId=com.example.archetypes
                       -DarchetypeArtifactId=maven-archetype
                       -DarchetypeVersion=1.0-SNAPSHOT
                       -DgroupId=com.example.restful
                       -DartifactId=cool-jaxrs-sample
                       -Dversion=1.0-SNAPSHOT

Nous devrions alors passer le GAV de notre archétype comme arguments à l'objectifmaven-archetype-plugin:generate. Nous pouvons également transmettre le GAV du projet concret que nous voulons générer, sinon, nous pouvons le fournir en mode interactif.

Le projet généré parcool-jaxrs-sample concret est donc prêt à fonctionner sans aucune modification. Nous pouvons donc l'exécuter en appelant simplement cette commande:

mvn package liberty:run

Nous pouvons alors accéder à cette URL:

http://localhost:9080/cool-jaxrs-sample//ping

6. Conclusion

Dans cet article, nous avons montré comment créer et utiliser un archétype Maven.

Nous avons montré comment créer l'archétype, puis comment configurer les ressources du modèle via le fichierarchetype-metadata.xml.

Le code, comme d'habitude, peut être trouvéover on Github.