Guide de l'archétype Maven

1. Vue d'ensemble

Un archétype Maven est une abstraction d'une sorte de projet qui peut être instancié dans un projet Maven personnalisé concret. En bref, c'est un modèle de modèle de projet à partir duquel d'autres projets sont créés .

Le principal avantage de l'utilisation des archétypes est de standardiser le développement de projets et de permettre aux développeurs de suivre facilement les meilleures pratiques tout en démarrant leurs projets plus rapidement.

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

2. Descripteur de l'archétype Maven

Le descripteur d'archétype Maven est au cœur du projet d'archétype . C'est un fichier XML nommé archetype-metadata.xml et situé dans le répertoire META-INF / maven du fichier jar.

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

   bar     src/main/java  **/*.java       

La balise requiredProperties est utilisée pour fournir des propriétés lors de la génération du projet. Ainsi, nous serons invités à fournir des valeurs pour eux, 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 généré concret. Un fichier filtré signifie que les espaces réservés seront remplacés par les valeurs fournies pendant le processus de génération.

Et, en utilisant packaged = ”true” dans le fileSet , nous disons que les fichiers sélectionnés seront ajoutés à la hiérarchie de dossiers spécifiée par la propriété package .

Si nous voulons générer un projet multi-modules, les modules de balises peuvent aider à configurer tous les modules du projet généré.

Notez que ce fichier concerne l'archétype 2 et supérieur. Dans la version 1.0.x, le fichier s'appelait simplement archetype.xml et avait une structure différente.

Pour plus d'informations, jetez un œil à la documentation officielle d'Apache.

3. Comment créer un archétype

Un archétype est un projet Maven normal avec le contenu supplémentaire suivant :

  • 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 nous pouvons ajouter les ressources mentionnées ci-dessus.

Ou, nous pouvons le générer en utilisant l' archetype-maven-plugin, puis personnaliser le contenu du répertoire archetype-resources et du fichier archetype-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.baeldung \ -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é dans target / generated-sources / archetype, prêt à être utilisé.

Quelle que soit la façon 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épertoire archetype-resources et en les configurant dans le fichier archetype-metadata.xml .

4. Construction de 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 simplement maven-archetype .

4.1. Emballage d'archétype

Commençons par modifier le pom.xml du projet archétype situé sous le répertoire maven-archetype :

maven-archetype

Ce type de packaging est disponible grâce à l' extension archétype-packaging :

   org.apache.maven.archetype archetype-packaging 3.0.1    

4.2. Ajout du pom.xml

Créons maintenant un fichier pom.xml situé sous le répertoire archetype-resources :

 ${groupId} ${artifactId} ${version} war   javax.ws.rs javax.ws.rs-api 2.1 provided   

Comme nous pouvons le voir, groupId, artifactId et version 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 le pom.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 dans archetype-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 , dans archetype-resources / src / main / config / liberty .

4.4. Configuration des 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 fichier archetype-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épertoire src / main / java et le fichier server.xml de src / main / config / liberty soient copiés.

4.5. Installer l'archétype

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

mvn install

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

5. Utilisation de l'archétype installé

Le plugin maven-archetype-plugin permet à l'utilisateur de créer un projet Maven via l' objectif de génération et l'archétype existant . Pour plus d'informations sur ce plugin, vous pouvez visiter la page d'accueil.

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

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

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

Le projet concret généré par cool-jaxrs-sample est donc prêt à fonctionner sans aucun changement. Donc, nous pouvons l'exécuter en appelant simplement cette commande:

mvn package liberty:run

On peut alors accéder à cette URL:

//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 fichier archetype-metadata.xml .

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